perldoc -q variable says:
...
How can I use a variable as a variable name?
Beginners often think they want to have a variable contain the name of
a variable.
Что не есть совсем правильно, так же не есть совсем правильно решить проблему через хеш переменных - хеш-хешей.
Но предложенное
${$tmp} = ... является в этом случае наиболее правильным, но вместо $tmp можно было использовать sprintf опять же не вводя лишнюю переменную.