这是代码:当我将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";
}
我得到。如何在不需要在代码块前添加sub
的情况下调用它?
它是第一个参数时为什么不起作用? – Geo 2010-03-04 18:59:22
@Geo,它可以工作,但你需要更明确:'function(“whatever”,sub {print“我在coderef \ n”});'name BLOCK EXPR'语法只适用于if coderef首先出现。 – friedo 2010-03-04 19:03:03
仅仅因为它是这样设计的。我怀疑让它摆在首位的主要原因是让用户编写子程序,这些子程序可以像内置函数一样调用,只需要一小段代码(如map和grep),但任何更灵活的东西都可能会快速混淆。 – Sean 2010-03-04 19:04:10