Asignación de Hashes

Es posible asignar un hash a otro:

%n = %a;
En un contexto de lista, el valor de un hash es la lista formada por sus pares clave-valor. En este ejemplo en la expresión (%a, %c) los hashes son automáticamente convertidos en listas:

%a = ( 'x', 5, 'y', 3);
%c = ( 'u', 5, 'v', 4);
@b = (%a, %c);

Esta última asignación se llama desenrollar (unwinding) el hash.

Por supuesto, aunque los pares clave-valor aparecen seguidos, el orden en que figuran en el array es el orden en el que internamente Perl accede al hash:

 DB<1> %a = (one=>1, two=>2, three=>3)
 DB<2> @b = %a
 DB<3> p "@b\n"
 one 1 three 3 two 2

Asignar un número impar de elementos a un hash da lugar a un mensaje de advertencia.

lhp@nereida:~/public_html/cgi-bin/tt$ perl -wde 0
main::(-e:1):   0
  DB<1> %a = (one, 1, two, 2, three)
Odd number of elements in hash assignment at (eval 5)

Como en el caso de los arrays, no es posible asignar undef a un hash.

%a = (); 
if (keys %a) { ... } # FALSE

%a = (lunes=>1, martes=>2, miercoles=>3, jueves=>4, viernes=>5, sabado=>6, domingo=>7 );
undef %a;
if (keys %a) { ... } # FALSE
if (defined %a) { ... } # Tambien es FALSE

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19