老问题 - 我不知道 Perl 的运行效率如何。
我有一组 if/elsif/else 语句,用于处理报告中不同数据类型的数据行。我发现如果使用子例程调用而不是可变大小的内联代码块,则更容易阅读和查看代码。
一些较旧的语言在处理调用方面有很大的惩罚,因此内联包含短例程而不是调用它们会更快。我不需要在调用时传递变量。正在读取的行包含所有数据,并且重要的项目被放入变量中以供稍后处理。
可能不是关键的知识,但我努力使我的程序高效且可读。我已经有了 if 链,因此首先检查最常见的 if 。
我已经内联编写了代码。我无法实际测量它的运行速度。由于它每 15 分钟处理一次,因此我不想再不必要地占用文件。
Perl 子调用比大多数编程语言中的函数调用有更多的开销,但是与文件 IO、网络访问等相比,它仍然是相对较小的开销。除非您调用一个函数数千次,否则内联它没有什么优势。
你提到的一件事对我来说很突出:
我不需要在调用时传递变量。
这实际上为您提供了显着的优化可能性。
不要调用处理该行的函数为foo(),而是将其调用为&foo(带有&号且不带括号)。@_当以这种方式调用函数时,这是向 Perl 发出的信号,表明该函数不带参数,因此 Perl 将避免在调用过程中设置新数组。这节省了一点开销。
(副作用是该函数现在能够看到其调用者的@_数组!)