next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Práctica: Ordenar por Calificaciones Sup: Hashes Ant: Hashes DBM Err: Si hallas una errata ...


Troceado de un hash

Es posible seleccionar un sub-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) }; # 3woof
Dos observaciones:
  1. Puesto que la lista de claves no es un único identificador se hace necesario el uso de las dobles comillas en este caso.
  2. El prefijo del trozo de un hash es @. 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 %name
Reflexione: ¿Porqué @name en el último ejemplo?


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Práctica: Ordenar por Calificaciones Sup: Hashes Ant: Hashes DBM Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21