鉴于此:
%h = (a => 3, b => 4, a => 5);
绝对 $h{a} == 5
成立,但在某些情况下 $h{a} == 3
因为内部字典散列或其他原因perl 内部行为?
另一种提问方式:即使在键冲突的情况下,perl 是否保证在将数组分配给散列时保持键顺序相同?
重复键条目对于诸如 %settings = (%defaults, %userflags)
这样的事情很方便,所以我可以硬编码默认值但用用户提供的标志覆盖。
最佳答案
是的,您可以相信赋值列表将从左到右求值,就像您可以相信以正确顺序对数组赋值一样。
sub DebugHash::TIEHASH { bless {}, shift }
sub DebugHash::CLEAR { %{shift} = (); }
sub DebugHash::STORE {
my ($tied, $key, $value) = @_;
print STDERR "STORE '$key' => '$value'\n";
$tied->{$key} = $value;
}
tie %hash, 'DebugHash';
%hash = (a => 'first', a => 'second', a => 'third',
a => 'fourth', a => 'next', a => 'last');
输出:
STORE 'a' => 'first'
STORE 'a' => 'second'
STORE 'a' => 'third'
STORE 'a' => 'fourth'
STORE 'a' => 'next'
STORE 'a' => 'last'
关于perl - 来自数组的散列分配中的后面的键是否总是覆盖前面的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72341555/