perl - 什么时候应该使用&调用Perl子程序?

  显示原文与译文双语对照的内容

我听说人们不应该使用 & 来调用Perl子程序 i.e:


function($a,$b,...);


# opposed to


&function($a,$b,...);



我知道一个参数列表变成可选的,但是有些情况是适合使用 &的情况。

同时,当省略 & 时,性能提升又如何发挥作用?

时间: 原作者:

目前,只有在获取或者调用coderef时,才有任何原因使用 &,如:


sub foo() {


 print"hin";


}



my $x = &foo;


&$x();



在大多数情况下,你不能使用它:绝对不要在大多数情况下调用具有指定非缺省调用行为的Prototype的子对象。 我的意思是,一些原型允许重新解释参数列表,例如转换 @array%hash 规范引用。 因这里,会预期那些reinterpretations已经发生,除非你手动模仿它们,否则,会得到不同的输入。

我认为人们正在试图告诉你,你仍然在使用 Perl 4风格,我们现在有一个更清晰的。

有关性能,Perl优化了 & 失败的子调用的各种方式,它的中一个主要是内联常量。

此外,使用 & 提供性能优势的情况也有: 如果要使用 foo(@_) 转发子呼叫。 使用 &foo的速度比 foo(@_) 快。 除非你已经确定了需要进行微优化,否则我不推荐它。

原作者:
...