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

Это код:

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

Ответы [ 2 ]

18 голосов
/ 04 марта 2010

Сначала укажите аргумент coderef:

sub function (&$) {
    my $code = shift;
    my $param1 = shift;
    # do something with $param1 and $code
}

function { print "i'm inside the coderef\n" } "whatever";

См. Справочную страницу perlsub, которая читается частично:

«&» Требует анонимной подпрограммы, которая, если передается в качестве первого аргумента, не требует ключевого слова "sub" или последующей запятой.
0 голосов
/ 05 марта 2010

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

...