Respostas:
% hash1 = (% hash1,% hash2) ## se não ... @ hash1 {keys% hash2} = valores% hash2; ## ou com referências ... $ hash_ref1 = {% $ hash_ref1,% $ hash_ref2};
undef
, zero, string vazia false
,, falsy ...)1 * (também conhecido como matriz associativa , também conhecido como dicionário )
%hash1 = (%hash1, %hash2)
$hash_ref1
como $hash_ref2
, sem fusão. Se quiser $hash_ref1 = { %$hash_ref1, %$hash_ref2 };
, vou editar a resposta.
Confira perlfaq4: Como faço para mesclar dois hashes . Já existem muitas informações boas na documentação do Perl e você pode obtê-las imediatamente ao invés de esperar que alguém responda. :)
Antes de decidir mesclar dois hashes, você deve decidir o que fazer se ambos os hashes contiverem chaves iguais e se quiser deixar os hashes originais como estavam.
Se você quiser preservar os hashes originais, copie um hash (% hash1) para um novo hash (% new_hash) e adicione as chaves do outro hash (% hash2 para o novo hash. Verificando se a chave já existe em% new_hash dá a você a chance de decidir o que fazer com as duplicatas:
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};
}
}
Se não quiser criar um novo hash, você ainda pode usar esta técnica de loop; apenas mude o% new_hash para% 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};
}
}
Se você não se importa que um hash substitua as chaves e valores do outro, você pode simplesmente usar uma fatia de hash para adicionar um hash a outro. Nesse caso, os valores de% hash2 substituem os valores de% hash1 quando têm chaves em comum:
@hash1{ keys %hash2 } = values %hash2;
Esta é uma pergunta antiga, mas aparece em alta na minha pesquisa no Google por 'hashes de mesclagem de perl' - e ainda não menciona o módulo CPAN muito útil Hash :: Merge