最初,我一直在寻找一种快速访问哈希引用元素的方法(如果没有可用的值,则使用默认值).
所以我尝试了以下方法:
use strict;
use warnings;
use DateTime;
my $hashref = { };
for (0..249) {
my $lIdx = $_ * 2;
$hashref->{"MYKEY$lIdx"} = "MYVAL$lIdx";
}
sub WithVariable{
my $result = $hashref->{"MYKEY$_[0]"};
return defined $result ? $result : "NONE";
}
sub WithoutVariable{
return defined $hashref->{"MYKEY$_[0]"} ? $hashref->{"MYKEY$_[0]"} : "NONE";
}
$|++;
my @preciousvalues1 = ();
my @preciousvalues2 = ();
my $dt = DateTime->now;
for (1..25000) { for (0..498) { push @preciousvalues1, WithVariable($_) } }
my $lag = DateTime->now - $dt;
print "With a variable: ", $lag->seconds, "\n";
$dt = DateTime->now;
for (1..25000) { for (0..498) { push @preciousvalues2, WithoutVariable($_) } }
$lag = DateTime->now - $dt;
print "Without a variable: ", $lag->seconds, "\n";
print "Done\n";
Run Code Online (Sandbox Code Playgroud)
但结果似乎是随机的,perl似乎在打印"完成"之后做了很多事情,并且需要永远退出.
我的问题是:
Perl版本:这是为MSWin32-x86-multi-thread构建的perl,v5.10.1
//(defined-or)运算符测试已定义的值,并在一个步骤中指定默认值.$result = $hashref->{$key} // "NONE"
如果定义了该值,则设置$result为$hashref->{$key},"NONE"否则.
2.或多或少.如果它困扰你,打一个
use POSIX;
POSIX::_exit(0);
在脚本的最后.这将立即结束您的脚本,绕过Perl的正常关闭例程(以及您放入END { }块中的任何代码).在这个脚本上使用它可能不是什么大问题,但通常不是最佳使用方法_exit.