我试图用perl合并这些hashmaps,但在密钥相同的情况下,无法弄清楚如何做到这一点。需要的输入是VAR1和VAR2,输出也提到了。
输入:VAR1和VAR2,输出也提到了。
my $VAR1 = { 'p'=> { 'a' => 2,
'b' => 3}};
my $VAR2 = { 'p'=> { 'c' => 4,
'd' => 7}};
希望的输出:
{'p'=> {
'a' => 2,
'b' => 3,
'c' => 4,
'd' => 7}};
说你有
my %h1 = ( a => 2, b => 3 );
my %h2 = ( c => 4, d => 7 );
要将它们合并成第三个哈希,你可以使用
my %h = ( %h1, %h2 );
这就好像你做了
my %h = ( a => 2, b => 3, c => 4, d => 7 );
任何共同的键都将从列表中后面的哈希中提取。
在你的情况下,你有匿名的哈希值。所以我们本来会使用 %NAME
,我们将使用 %BLOCK
,其中块返回一个我们想要使用的哈希的引用。这就得到了下面的内容。
my %h_inner = (
%{ $VAR1->{p} },
%{ $VAR2->{p} },
);
这也可以写成如下:[1]
my %h_inner = (
$VAR1->{p}->%*,
$VAR2->{p}->%*,
);
最后,你还想用一个键入为 p
其值是对这第一个新哈希的引用。
my %h_outer = ( p => \%h_inner );
所以,总的来说,你想要
my %h_inner = (
%{ $VAR1->{p} },
%{ $VAR2->{p} },
);
my %h_outer = ( p => \%h_inner );
我们也可以使用匿名哈希构造函数({}
)代替。
my %h_outer = (
p => {
%{ $VAR1->{p} },
%{ $VAR2->{p} },
},
};
文档。