Посмотрите perlfaq4: Как объединить два хэша . В документации Perl уже есть много полезной информации, и вы можете получить ее прямо сейчас, а не ждать, пока кто-нибудь ответит. :)
Прежде чем вы решите объединить два хэша, вы должны решить, что делать, если оба хэша содержат одинаковые ключи, и если вы хотите оставить исходные хэши такими, какими они были.
Если вы хотите сохранить исходные хеши, скопируйте один хеш (% hash1) в новый хэш (% new_hash), затем добавьте ключи из другого хеша (% 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;