%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