Sprawdź perlfaq4: Jak połączyć dwa skróty . W dokumentacji Perla jest już wiele dobrych informacji i możesz je mieć od razu, zamiast czekać, aż ktoś inny odpowie. :)
Zanim zdecydujesz się scalić dwa skróty, musisz zdecydować, co zrobić, jeśli oba skróty zawierają takie same klucze i chcesz pozostawić oryginalne skróty bez zmian.
Jeśli chcesz zachować oryginalne skróty, skopiuj jeden skrót (% hash1) do nowego skrótu (% new_hash), a następnie dodaj klucze z drugiego skrótu (% hash2 do nowego skrótu. Sprawdzanie, czy klucz już istnieje w% new_hash) daje szansę zdecydować, co zrobić z duplikatami:
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};
}
}
Jeśli nie chcesz tworzyć nowego skrótu, nadal możesz użyć tej techniki zapętlania; po prostu zmień% new_hash na% 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};
}
}
Jeśli nie obchodzi Cię, że jeden skrót zastępuje klucze i wartości drugiego, możesz po prostu użyć wycinka skrótu, aby dodać jeden skrót do drugiego. W tym przypadku wartości z% hash2 zastępują wartości z% hash1, jeśli mają wspólne klucze:
@hash1{ keys %hash2 } = values %hash2;