我听说人们不应该使用&调用Perl subs,即:
function($a,$b,...); # opposed to &function($a,...);
我知道一个参数列表变为可选,但在某些情况下,适当的使用&和你绝对不应该使用它的情况?
解决方法
海事组织,唯一有时间有任何理由使用&是如果你获得或调用coderef,如:
sub foo() { print "hi\n"; } my $x = \&foo; &$x();
在大多数情况下,绝对不应该使用它的主要时间是调用具有指定任何非默认调用行为的原型的子。我的意思是,一些原型允许重新解释参数列表,例如将@array和%哈希规范转换为引用。所以sub会期望这些重新解释已经发生,除非你去任何长度是必要的手工模仿,sub将获得输入与其期望的疯狂地不同。
我想主要是人们试图告诉你,你仍然在写Perl 4风格,我们有一个更清洁,更好的东西叫Perl 5现在。
关于性能,有各种方式,Perl优化子呼叫,失败,其中一个主要是内联常量。
还有一种情况,其中使用&提供了性能优势:如果您使用foo(@_)转发子调用。使用& foo比foo(@_)无限小。我不会推荐它,除非你已经明确地通过分析发现,你需要微优化。