/ / ¿Se garantiza que esto sobrescriba% hash1 con% hash2 cuando surja un conflicto? - perl

¿Se garantiza que esto sobrescriba% hash1 con% hash2 cuando surja un conflicto? - perl

%args = (%hash1,%hash2);

¿Esto está garantizado para sobrescribir? %hash1 con %hash2 ¿Cuándo surge el conflicto en Perl?

Respuestas

6 para la respuesta № 1

Sí 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}();

De perldoc perlglossary:

  • 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.