Включите строгие и предупреждения, и вы получите некоторые подсказки о том, что происходит не так.
use strict;
use warnings;
my $hash = { a => 1, b => 2, c => 3 };
my $a = \$$hash{a};
my $b = \$hash->{b};
print "$$a $$b\n";
В общем, если вы хотите делать что-то с кусочками или принимать refs , вы должны использовать старый стиль, сложенный синтаксический символ, чтобы получить то, что вы хотите. Вам может пригодиться справочник References , если вы не помните подробные сведения о синтаксисе свайных символов.
обновление
Как указывает murugaperumal , вы можете сделать my $foo = \$hash->{a};
Я могу поклясться, что попробовал это, и это не сработало (к моему удивлению). Я объясню, что усталость делает меня еще более глупой.