带内联的子例程 perl

subroutine perl with inline

我有一个 Perl 函数,它没有 return 任何值。它也不接受任何参数。

sub test {
    #do my logic
}

我可以这样做吗:

sub test() {
    #do my logic
}

子例程test会被内联吗?这行得通吗? (意思是函数调用会被函数定义替换。我的程序会执行得更快吗?)

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

这在 Constant Functions in perlsub

中得到了回答

Functions with a prototype of () are potential candidates for inlining. If the result after optimization and constant folding is either a constant or a lexically-scoped scalar which has no other references, then it will be used in place of function calls made without &. Calls made using & are never inlined. (See constant.pm for an easy way to declare most constants.)

所以你的sub test()如果满足以上条件就应该是内联的。没有人能不看功能就知道,所以要么展示它要么尝试。

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

我建议您对程序进行概要分析,以确保函数调用开销是问题所在。