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