perl - 来自数组的散列分配中的后面的键是否总是覆盖前面的键?

标签 perl associative-array

鉴于此:

%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/

相关文章:

perl - 对 'and' 关键字感到困惑

php - 根据相同的键连接数组值

bash - 在具有非连续索引的关联数组中查找重复元素

javascript - 如何按属性值对 JavaScript 中的对象数组进行排序?

linux - 在 linux 中搜索和替换一行?

perl - 如何使用 Test::Class::Load 运行单独的测试?

perl - 将 Perl 中的 Pi 舍入到小数点后第 100 位?

javascript - 如何在 JavaScript 中创建和修改关联数组?

javascript - 在 Javascript 中创建一个具有自定义 get/put 操作的关联数组

perl - 如何根据一组行的列的最低值对文本文件的内容进行排序