hash
utilizando la notación
que aparece en este ejemplo:
hp@nereida:~/public_html/cgi-bin/tt$ perl -wde 0 main::(-e:1): 0 DB<1> %a = (x => 5, y => 3, z => "woof", t => undef) DB<2> print @a{"y", "z"} 3woof DB<3> print @a{qw(y z) } 3woof DB<4> print @a{y, z} Transliteration pattern not terminated at (eval 8)Dos observaciones:
@
. El símbolo %
se
reserva para el hash completo. Un trozo de un hash es la lista de valores para las
claves especificadas. No es un escalar (hay varios elementos)
ni un hash
(no ha claves)
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?
Casiano Rodríguez León