可能重复:
What does the function declaration “sub function($$)” mean?
sub t(&@) {
print @_;
}
t {print 1};
我尝试将&@
更改为&$
,但它会失败。
它的语言是什么,以便我可以搜索?
答案 0 :(得分:5)
&@
是一个子程序原型。这使您可以创建类似于内置grep
函数的语法(接受 BLOCK ,然后接受 LIST )。 LIST 甚至可以是空列表:()
。
&$
使用时会强制在标量上下文中计算第二个参数(必须)。由于t {print 1};
中没有第二个参数,因此无法编译。
在perldoc perlsub
了解有关子程序原型的更多信息。
答案 1 :(得分:1)
我不太清楚你想要代码做什么,但是你要为你的sub创建一个原型,请参阅perldocs。 &
表示子t
将块作为第一个参数,@
表示其余参数是数组。
当你调用你的函数时,你传递一个参数,块{print 1}
,那就是你打印出来的 - CODE引用作为字符串。 &$
失败的原因是你没有传递第二个参数。这对&@
来说很好,因为第二个参数是空数组。
答案 2 :(得分:0)
您正在寻找的术语是“perl函数原型”。
答案 3 :(得分:0)