2011-09-21 485 views
4

可能重复:
What does the function declaration “sub function($$)” mean?&@是什么意思?

sub t(&@) { 
    print @_; 
} 
t {print 1}; 

我试图改变&@&$,它会失败。

这是什么术语,以便我可以搜索?

+2

这是一个原型。 – Alex

+0

请参阅代码示例中的第8行[此处](http://perldoc.perl.org/perlsub.html#Prototypes) –

+0

另请参阅[this old rant](http://www.perlmonks.org/?node_id= 406231)关于为什么你可能不应该使用原型。 –

回答

5

&@是子程序原型。这使您可以创建类似于内置函数的语法(接受BLOCK,然后使用LIST)。 列表甚至可以是空列表:()

&$在使用时将强制在标量上下文中评估第二个参数(这是强制的)。由于t {print 1};中没有第二个参数,它将无法编译。

阅读有关子程序原型的更多信息:perldoc perlsub

+0

'&$'和'&; $'有什么区别? –

+0

';'使参数的其余部分可选。 –

0

您正在寻找的术语是“perl function prototypes”。

1

我不太清楚你想要代码做什么,但是你正在为你的子创建一个原型,请参阅perldocs&表示子t将块作为第一个参数,@表示其余参数是一个数组。

当你调用你的函数时,你传递了一个参数,块{print 1},这就是你打印出来的 - CODE引用作为一个字符串。 &$失败的原因是您没有传递第二个参数。对于&@这很好,因为第二个参数是空数组。

+1

与所有答案的驱动器downvotes什么? – cftarnas

+0

我认为有人正在与社区合作。 –