Respuestas:
% hash1 = (% hash1,% hash2) ## si no ... @ hash1 {claves% hash2} = valores% hash2; ## o con referencias ... $ hash_ref1 = {% $ hash_ref1,% $ hash_ref2};
undef
, cero, cadena vacía false
, falsedad ...)1 * (también conocido como matriz asociativa , también conocido como diccionario )
%hash1 = (%hash1, %hash2)
$hash_ref1
en $hash_ref2
, sin fusión. Si quieres $hash_ref1 = { %$hash_ref1, %$hash_ref2 };
, editaré la respuesta.
Echa un vistazo a perlfaq4: ¿Cómo fusiono dos hashes ? Ya hay mucha información buena en la documentación de Perl y puede tenerla de inmediato en lugar de esperar a que otra persona la conteste. :)
Antes de decidir fusionar dos hashes, tienes que decidir qué hacer si ambos hashes contienen claves iguales y si quieres dejar los hashes originales como estaban.
Si desea conservar los hash originales, copie un hash (% hash1) en un nuevo hash (% new_hash), luego agregue las claves del otro hash (% hash2 al nuevo hash. Verificando que la clave ya existe en% new_hash te da la oportunidad de decidir qué hacer con los duplicados:
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};
}
}
Si no desea crear un nuevo hash, aún puede utilizar esta técnica de bucle; simplemente cambie% new_hash a% 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};
}
}
Si no le importa que un hash sobrescriba las claves y los valores del otro, puede usar un trozo de hash para agregar un hash a otro. En este caso, los valores de% hash2 reemplazan los valores de% hash1 cuando tienen claves en común:
@hash1{ keys %hash2 } = values %hash2;
Esta es una pregunta antigua, pero aparece en un lugar destacado en mi búsqueda de Google de 'perl merge hashes' y, sin embargo, no menciona el muy útil módulo CPAN Hash :: Merge