%args = (%hash1,%hash2);
¿Esto está garantizado para sobrescribir? %hash1
con %hash2
¿Cuándo surge el conflicto en Perl?
Respuestas
6 para la respuesta № 1Sí lo es. Las teclas posteriores sobreescriben las anteriores.
4 para la respuesta № 2
Si no está viendo un comportamiento de sobrescritura, entonces está haciendo algo mal:
#!/usr/bin/perl
use strict;
use warnings;
sub func { print "funcn" }
sub tion { print "tionn" }
my %args = (
handler => &tion,
);
my $dispatch = {
handler => &func,
%args
};
$dispatch->{handler}();
- lista
Un conjunto ordenado de valores escalares.
De perldoc perldata
:
Las LISTAS hacen interpolación automática de sublistas. Es decir, cuando se evalúa una LISTA, cada elemento de la lista se evalúa en el contexto de la lista, y el valor de la lista resultante se interpola en la LISTA como si cada elemento individual fuera miembro de la LISTA. De esta manera, los arreglos y los hashes pierden su identidad en una LISTA.
y
Un hash se puede inicializar utilizando una lista literal que contiene pares de elementos que deben interpretarse como una clave y un valor.
El resultado práctico es que un hash en la listacontexto produce una lista de pares clave / valor. Una vez que se trata de una lista, tiene un pedido (el pedido en el que se devolvió), nunca se le garantiza en qué orden volverán las claves y los valores, pero las listas garantizan el orden de sus elementos, por lo que (a => 1, %h)
crea una lista que comienza con "a"
, seguido por 1
, seguido de la primera clave devuelta por %h
, seguido del primer valor devuelto por %h
, y así. Esa lista se asigna al hash de destino en el orden de la lista, lo que significa que si la clave "a"
es en %h
entonces anulará el original.
0 para la respuesta № 3
No.% hash1 no se modifica en absoluto por esa declaración.