我应该在什么时候使用&来调用Perl子例程?

我听说人们不应该使用&调用Perl subs,即:
function($a,$b,...);
# opposed to
&function($a,...);

我知道一个参数列表变为可选,但在某些情况下,适当的使用&和你绝对不应该使用它的情况?

当忽略&amp ;?时,性能增加如何发挥作用?

解决方法

海事组织,唯一有时间有任何理由使用&是如果你获得或调用coderef,如:
sub foo() {
    print "hi\n";
}

my $x = \&foo;
&$x();

在大多数情况下,绝对不应该使用它的主要时间是调用具有指定任何非默认调用行为的原型的子。我的意思是,一些原型允许重新解释参数列表,例如将@array和%哈希规范转换为引用。所以sub会期望这些重新解释已经发生,除非你去任何长度是必要的手工模仿,sub将获得输入与其期望的疯狂地不同。

我想主要是人们试图告诉你,你仍然在写Perl 4风格,我们有一个更清洁,更好的东西叫Perl 5现在。

关于性能,有各种方式,Perl优化子呼叫,失败,其中一个主要是内联常量。

还有一种情况,其中使用&提供了性能优势:如果您使用foo(@_)转发子调用。使用& foo比foo(@_)无限小。我不会推荐它,除非你已经明确地通过分析发现,你需要微优化。

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...