带内联的子例程 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
部分。
我建议您对程序进行概要分析,以确保函数调用开销是问题所在。
我有一个 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. (Seeconstant.pm
for an easy way to declare most constants.)
所以你的sub test()
如果满足以上条件就应该是内联的。没有人能不看功能就知道,所以要么展示它要么尝试。
使用 B::Deparse 最容易检查,请参阅链接的 perlsub
部分。
我建议您对程序进行概要分析,以确保函数调用开销是问题所在。