当我将coderef传递给这个原型Perl子例程时,为什么会出现语法错误?

时间:2010-03-04 18:50:18

标签: perl reference coderef

这是代码:

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 个答案:

答案 0 :(得分:18)

首先放入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”关键字或后续逗号。

答案 1 :(得分:-3)

下面, $&安培;是一个Perl的特殊变量,用于匹配精确的模式。 (你在你的上下文中错误地使用它) $`用于匹配给定模式之前的字符串。 $'用于匹配给定模式后的字符串。