Usando o valor de uma variável como outro nome de variável no Ruby

Estou começando a aprender Ruby e escrevi um programa que gera alguns números e os atribui às variáveis @one, @two, @three etc. O usuário pode especificar uma variável a ser alterada inserindo seu nome (por exemplo, 1). Preciso fazer algo como '@ [valueofinout] = asd'. Como eu faria isso, e há uma maneira melhor de como a maneira como estou pensando parece desanimada? encontrei

x = "myvar"
myvar = "hi"
eval(x) -> "hi"

mas não entendo completamente por que a segunda linha é necessária. No meu caso, eu usaria algo como

@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto