Check out perlfaq4: Wie kann ich zwei Hashes verschmelzen . Die Perl-Dokumentation enthält bereits viele gute Informationen, die Sie sofort erhalten können, anstatt darauf zu warten, dass jemand anderes sie beantwortet. :) :)
Bevor Sie zwei Hashes zusammenführen, müssen Sie entscheiden, was zu tun ist, wenn beide Hashes dieselben Schlüssel enthalten und Sie die ursprünglichen Hashes unverändert lassen möchten.
Wenn Sie die ursprünglichen Hashes beibehalten möchten, kopieren Sie einen Hash (% hash1) in einen neuen Hash (% new_hash) und fügen Sie dann die Schlüssel aus dem anderen Hash (% hash2) in den neuen Hash ein. Überprüfen Sie, ob der Schlüssel bereits in% new_hash vorhanden ist gibt Ihnen die Möglichkeit zu entscheiden, was mit den Duplikaten geschehen soll:
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};
}
}
Wenn Sie keinen neuen Hash erstellen möchten, können Sie diese Schleifentechnik weiterhin verwenden. Ändern Sie einfach% new_hash in% 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};
}
}
Wenn es Ihnen egal ist, dass ein Hash Schlüssel und Werte des anderen überschreibt, können Sie einfach ein Hash-Slice verwenden, um einen Hash zu einem anderen hinzuzufügen. In diesem Fall ersetzen Werte aus% hash2 Werte aus% hash1, wenn sie Schlüssel gemeinsam haben:
@hash1{ keys %hash2 } = values %hash2;