hash
utilizando la notación
que aparece en este ejemplo:
%a = (x => 5, y => 3, z => "woof", t => undef); print @a{"y", "z"}; # 3woof print @a{qw(y z) }; # 3woofDos observaciones:
@
. El símbolo %
se
reserva para el hash completo. Un trozo de un hash es una lista, no un escalar
o un hash
.
Observe también el símbolo al comienzo de la variable (dolar o arroba) determina el contexto (escalar o lista) en el que se evalúa la expresión que indexa.
Al usar un trozo de un hash en el lado izquierdo se obtiene el efecto esperado:
@a{"y", "z"} = ("andale, andale!", 7.2); @a = %a; print "@a\n";
La asignación @a{"y", "z"} = ("andale, andale!", 7.2)
es equivalente a la asignación ($a{y}, $a{z}) = ("andale, andale!", 7.2)
.
Algunos otros ejemplos:
@char_num{'A'..'Z'} = 1..26; # crea un hash con claves 'A' .. 'Z' @old{keys %new} = values %new; # Escribe/extiende los contenidos de %new sobre %old delete @name{keys %invalid}; # Suprime los elementos en %invalid de %nameReflexione: ¿Porqué
@name
en el último ejemplo?