回答:
%hash1 =(%hash1、%hash2) ##またはその他... @ hash1 {keys%hash2} =値%hash2; ##または参照付き... $ hash_ref1 = {%$ hash_ref1、%$ hash_ref2};
undef
、ゼロ、空の文字列false
、、、偽...)%hash1 = (%hash1, %hash2)
$hash_ref1
れ$hash_ref2
、マージされません。あなたが欲しい$hash_ref1 = { %$hash_ref1, %$hash_ref2 };
、私は答えを編集します。
perlfaq4を確認してください:2つのハッシュをマージするにはどうすればよいですか。Perlのドキュメントにはすでに多くの優れた情報があり、誰かが答えるのを待つのではなく、すぐにそれを入手できます。:)
2つのハッシュをマージすることを決定する前に、両方のハッシュに同じキーが含まれている場合、および元のハッシュをそのままにしたい場合はどうするかを決定する必要があります。
元のハッシュを保持する場合は、1つのハッシュ(%hash1)を新しいハッシュ(%new_hash)にコピーしてから、もう1つのハッシュ(%hash2から新しいハッシュにキーを追加します。キーが%new_hashに既に存在することを確認します。重複をどうするかを決める機会を与えます:
my %new_hash = %hash1; # make a copy; leave %hash1 alone
foreach my $key2 ( keys %hash2 )
{
if( exists $new_hash{$key2} )
{
warn "Key [$key2] is in both hashes!";
# handle the duplicate (perhaps only warning)
...
next;
}
else
{
$new_hash{$key2} = $hash2{$key2};
}
}
新しいハッシュを作成したくない場合でも、このループ手法を使用できます。%new_hashを%hash1に変更するだけです。
foreach my $key2 ( keys %hash2 )
{
if( exists $hash1{$key2} )
{
warn "Key [$key2] is in both hashes!";
# handle the duplicate (perhaps only warning)
...
next;
}
else
{
$hash1{$key2} = $hash2{$key2};
}
}
あるハッシュが別のハッシュからキーと値を上書きすることを気にしない場合は、ハッシュスライスを使用して、あるハッシュを別のハッシュに追加できます。この場合、共通のキーがある場合、%hash2の値は%hash1の値を置き換えます。
@hash1{ keys %hash2 } = values %hash2;
これは古い質問ですが、Google検索で「perlマージハッシュ」が高く表示されますが、非常に役立つCPANモジュールHash :: Mergeについては触れられていません。