You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并哈希数组并以最新哈希值覆盖旧值?

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:47:46