Это - код:
sub function($&) {
my $param1 = shift;
my $code = shift;
# do something with $param1 and $code
}
Если я пытаюсь назвать его как это:
function("whatever") {
print "i'm inside the coderef\n";
}
Я добираюсь Not enough arguments for MyPackage::function at x.pl line 5, near ""whatever" { "
. Как я могу назвать его, не имея необходимость добавлять sub
перед блоком кода?
Поставьте аргумент coderef первым:
sub function (&$) {
my $code = shift;
my $param1 = shift;
# do something with $param1 and $code
}
function { print "i'm inside the coderef\n" } "whatever";
См. man-страницу perlsub, которая гласит, в частности:
"&" требует анонимной подпрограммы, которая, если передана в качестве первого аргумента, не требует ключевого слова "sub" или последующей запятой.
Здесь, $& - это специальная переменная Perl, которая используется для поиска точного шаблона. (Вы неправильно использовали ее в своем контексте). $` используется для поиска строки перед заданным шаблоном. $' используется для поиска строки после заданного шаблона.