%hash1 = (%hash1, %hash2) ## or else ... @hash1{keys %hash2} = values %hash2; ## or with references ... $hash_ref1 = { %$hash_ref1, %$hash_ref2 };
undef
, нуль, пустая строка, false
, falsy...) <глоток> 1 глоток> * (иначе ассоциативный массив , иначе словарь )
Выезд 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;