【发布时间】:2011-03-20 07:00:20
【问题描述】:
从解释器的 POV 来看,以下程序之间有什么区别:
#!/usr/bin/perl -w
use strict;
for (1..10000000) {
my $jimmy = $_**2;
}
和
#!/usr/bin/perl -w
use strict;
my $jimmy;
for (1..10000000) {
$jimmy = $_**2;
}
第一个节目的“时间”报告:
real 0m1.519s
user 0m1.513s
sys 0m0.004s
第二个:
real 0m1.023s
user 0m1.012s
sys 0m0.002s
【问题讨论】:
-
除了 Robert Greiner 的回答之外,
my在您的代码中的两个位置在语义上是不同的,这在非玩具程序中可能很重要。 -
请记住,仅仅因为您可以优化一段代码,并不意味着您应该这样做。分析整个应用程序,看看您尝试优化的代码是否占处理时间的很大一部分。此外,尝试设置全局和本地性能目标,一旦达到目标,就停止优化:)
-
如果您想查看在循环内声明
my时发生的额外操作的列表,您可以像这样运行每个脚本并比较不同的输出:perl -MO=Concise,-exec script.pl。 -
鉴于有关重新初始化的答案,我很惊讶没有人提到使用 state 而不是我的
标签: perl interpreter strict