Inicialización del Iterador

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:

  1. Al usar las funciones 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
    
  2. También es reinicializado si se almacena una nueva lista de valores en el hash completo
  3. Si each ha iterado sobre todos los elementos del mismo, alcanzando el final del hash.
Sin embargo, almacenar una nueva pareja clave-valor durante la iteración no necesariamente reinicializa el iterador. Incluso si se inicializa un trozo:
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

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