La función
each
toma un hash
como argumento y devuelve una clave distinta
cada vez que es llamada. Cuando todas las claves han sido visitadas,
devuelve undef
.
Veamos un ejemplo:
DB<1> %a = (juan=>5, pedro=>0, marta=>10) DB<2> print "$a{$n} " while defined($n = each %a) 0 10 5
Si each
es llamada dentro de un contexto de lista,
devuelve una lista con dos elementos: la siguiente clave y el siguiente
valor. Después que todos los elementos del hash
hayan sido
visitados, each
devuelve una lista vacía. Por ejemplo:
DB<4> print "$k => $v\n" while ($k, $v) = each %a pedro => 0 marta => 10 juan => 5
Cada hash es una estructura de datos que contiene un iterador privado.
Esto permite el anidamiento
de bucles each
, siempre que esten iterando sobre hashes diferentes.
El iterador es reinicializado automáticamente en las siguientes circunstancias:
keys
o values
sobre el hash.
Por ejemplo:
nereida:~/src/perl/YappWithDefaultAction/lib/Parse/Eyapp> perl -wde 0 main::(-e:1): 0 DB<1> %a = (juan=>5, pedro=>0, marta=>10) DB<2> $n = each %a; print $n pedro DB<3> $n = each %a; print $n marta DB<4> @b = keys %a; $n = each %a; print $n pedro
each
ha iterado
sobre todos los elementos del mismo, alcanzando el final del hash.
lhp@nereida:~/public_html/cgi-bin/tt$ perl -wde 0 main::(-e:1): 0 DB<1> %a = (juan=>5, pedro=>0, marta=>10) DB<2> $n = each %a; print $n pedro DB<3> @a{juan,marta} = (2,3) DB<4> $n = each %a; print $n marta DB<5> x %a 0 'pedro' 1 0 2 'marta' 3 3 4 'juan' 5 2