我有以下 Perl 代码。
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my @array = ( 3, 4, 1, 4, 7, 7, 4, 1, 3, 8 );
my %unordered;
@unordered{@array} = undef;
foreach my $key (keys %unordered) {
print "Unordered: $key\n";
}
my %seen;
my @ordered;
foreach my $element (@array) {
if ( not $seen{$element}++ ) {
push @ordered, $element;
}
}
在最后一个foreach
代码块中,我无法理解这一点 - 在第一次迭代中,表达式的not $seen{$element}++
计算结果为非 0 - true - 所以 if 块执行。在第二次迭代中,表达式not $seen{$element}++
应该再次评估为非 0 - true,因为哈希为空。因此,读取标量$seen{$element}
将读取 0 而不是 0 将评估为真。因此,if 块应该再次执行。但是,这本书说它在第一次迭代后停止。谁能解释一下?