В вашем цикле foreach
синтаксическая ошибка приведена ниже:
my &routine;
Ваша переменная $routine_ref
уже имеет ссылку на подпрограмму, поэтому все, что вам нужно сделать, это вызвать ее:
for my $routine_ref (@routines) {
&{$routine_ref};
}
Как всегда с Perl, «Есть больше, чем один способ сделать это». Например, если какая-либо из этих подпрограмм принимает параметры, вы можете передать их в круглых скобках следующим образом:
for my $routine_ref (@routines) {
$routine_ref->();
}
Также обратите внимание, что я использовал for
вместо foreach
, что является лучшей практикой, предложенной Дамианом Конвеем в Perl Best Practices .