首页 文章

内联的子程序perl

提问于
浏览
4

我有一个Perl函数,它不返回任何值 . 它也没有任何论据 .

sub test {
    #do my logic
}

我可以这样做:

sub test() {
    #do my logic
}

子程序 test 会被内联吗?这会有用吗? (意思是函数调用将被函数定义替换 . 并且我的程序执行得更快吗?)

函数test()被调用5000次 . 而我的Perl程序执行时间比预期的要长 . 所以我想让我的程序更快 . 提前致谢!

1 回答

  • 4

    这在Constant Functions in perlsub中得到了解答

    具有()原型的函数是内联的潜在候选者 . 如果优化和常量折叠后的结果是常量或没有其他引用的词法范围的标量,那么它将用于代替没有&的函数调用 . 使用&进行的调用永远不会内联 . (请参阅constant.pm以获得声明大多数常量的简单方法 . )

    因此,如果满足上述条件,则应该内联 sub test() . 没有人看到这个功能,没有人能说出来,所以无论是展示还是尝试 .

    使用B::Deparse最容易检查,请参阅链接的 perlsub 部分 .

    我敦促您分析程序,以确保函数调用开销是问题 .

相关问题