Этот прием работает только с глобальными переменными (символьные ссылки ищут таблицу символов текущего пакета), т.е. е.
perl -e '$foo=0xdead; my $bar ="foo"; print ${$bar}."\n";'
Если вы хотите поймать лексику, вам придется использовать eval ""
perl -e 'my $foo=0xdead; my $bar ="foo"; print eval("\$$bar"),"\n";'
Но использование eval ""
без цели считается плохим стилем в Perl, как и использование глобальных переменных. Рассмотрите возможность использования реальных ссылок (если можете).