有一个问题可以准确地解释我在这里想要什么:how to merge 2 deep hashes in perl
但是,那里的答案似乎对我不起作用(使用Merge
模块的建议)。
我有两个像这样的哈希:
$VAR1 = {
'57494' => {
'name' => 'John Smith',
'age' => '9',
'height' => '120'
},
'57495' => {
'name' => 'Amy Pond',
'age' => '17',
'height' => '168'
}
}
};
$VAR1 = {
'57494' => {
'name_address' => 'Peter Smith',
'address' => '5 Cambridge Road',
'post_code' => 'CR5 0FS'
}
}
};
如果我使用Hash::Merge
或%c = {%a,%b}
我每次都得到的格式:
$VAR1 = '57494';
$VAR2 = {
'name_address' => 'Peter Smith',
'address' => '5 Cambridge Road',
'post_code' => 'CR5 0FS'
};
(所以它基本上用第二个数据覆盖了第一个数据并弄乱了键)当我想要的时候:
$VAR1 = {
'57494' => {
'name' => 'John Smith',
'age' => '9',
'height' => '120'
'name_address' => 'Peter Smith',
'address' => '5 Cambridge Road',
'post_code' => 'CR5 0FS'
},
'57495' => {
'name' => 'Amy Pond',
'age' => '17',
'height' => '168'
}
}
};
因此,当键相同时,数据合并在一起,否则新键只是附加到末尾。我希望这是有道理的。也许我使用错误Merge
或需要“手动”将它们添加到循环中,但我花了太多时间考虑它,无论如何!
编辑:我如何使用 Merge 来查看我是否在做一些愚蠢的事情:
我有:
use Hash::Merge qw( merge );
...hash data above as %hash1 and %hash2...
my %combined_hash = %{ merge( %hash1,%hash2 ) };
print Dumper(%combined_hash);