如何合并哈希数组并以最新哈希值覆盖旧值?
解决Perl哈希合并时的"Not a HASH reference"错误
嘿,我一眼就看到问题出在哪啦!你报错的根源是数组初始化时用错了语法~
在Perl里,[]是用来创建数组引用的,而你这里想要的是直接创建一个包含两个哈希的数组,应该用()才对。你写的@arrayofhashes = [ { ... }, { ... } ]实际上把数组变成了一个只装了单个数组引用的容器,当你用for @arrayofhashes循环时,每次拿到的是那个数组引用,而不是你期望的哈希,自然就会抛出"Not a HASH reference"的错误了。
修正后的代码
use Data::Dumper; my @arrayofhashes = ( { 'a' => 4, 'b' => 3 }, { 'c' => 5, 'a' => 2 } ); my %merged; @merged{ keys %$_ } = values %$_ for @arrayofhashes; print Dumper \%merged;
运行结果
这样修改后,循环会依次遍历数组里的两个哈希,后面的哈希键值对会覆盖前面重复的键(比如a的值从4被更新为2),就能得到你预期的输出:
$VAR1 = { 'a' => 2, 'b' => 3, 'c' => 5, };
内容的提问来源于stack exchange,提问作者AnArrayOfFunctions
相关产品推荐
相关产品推荐

