Вы должны разыменовать строку, содержащую имя подпрограммы как подпрограмму.Круглые скобки являются необязательными.
my $name = 'route';
&{$name};
Поскольку имя вашей процедуры является хеш-значением, вы должны извлечь его из хеша.Кроме того, поскольку вы используете strict
(что является хорошей практикой), вы должны локально отключать проверки.
{
no strict 'refs';
&{$h{a}};
}
Однако, как предположил Даворг в своем ответе, это будет лучше (с точки зрения производительности)непосредственно хранить ссылку на подпрограмму в вашем хэше вместо имени процедуры.