Vérifiez perlfaq4 : Comment fusionner deux hashs ? . Il y a déjà beaucoup de bonnes informations dans la documentation Perl et vous pouvez les avoir tout de suite plutôt que d'attendre que quelqu'un d'autre y réponde. :)
Avant de décider de fusionner deux hachages, vous devez décider de ce qu'il faut faire si les deux hachages contiennent des clés identiques et si vous voulez laisser les hachages originaux tels quels.
Si vous souhaitez préserver les hachages d'origine, copiez un hachage (%hash1) vers un nouveau hachage (%new_hash), puis ajoutez les clés de l'autre hachage (%hash2) au nouveau hachage. En vérifiant que la clé existe déjà dans %new_hash, vous pouvez décider de ce que vous allez faire des doublons :
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};
}
}
Si vous ne voulez pas créer un nouveau hachage, vous pouvez toujours utiliser cette technique de bouclage ; il suffit de remplacer %new_hash par %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};
}
}
Si vous ne vous souciez pas du fait qu'un hachage écrase les clés et les valeurs d'un autre, vous pouvez simplement utiliser une tranche de hachage pour ajouter un hachage à un autre. Dans ce cas, les valeurs de %hash2 remplacent les valeurs de %hash1 lorsqu'elles ont des clés en commun :
@hash1{ keys %hash2 } = values %hash2;