Почему я получаю синтаксическую ошибку, когда я передаю coderef этой смоделированной подпрограмме Perl?

Это - код:

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 перед блоком кода?

7
задан Sinan Ünür 4 March 2010 в 19:37
поделиться

2 ответа

Поставьте аргумент 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" или последующей запятой.
18
ответ дан 6 December 2019 в 14:03
поделиться

Здесь, $& - это специальная переменная Perl, которая используется для поиска точного шаблона. (Вы неправильно использовали ее в своем контексте). $` используется для поиска строки перед заданным шаблоном. $' используется для поиска строки после заданного шаблона.

-3
ответ дан 6 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: