El código del constructor iterator
retorna la subrutina de iteración.
Esta última controla el agotamiento
de la lista en la línea 9.
En tal caso se vuelve a iniciar el
contador ($next = $from-$step
)
y se retorna undef
(obsérvese el
uso de la coma).
lhp@nereida:~/Lperl/src$ cat -n iterators.pl 1 use strict; 2 3 sub iterator { 4 my ($from, $to, $step) = @_; 5 $step = 1 unless defined($step); 6 my $next = $from-$step; # iniciar contador 7 my $closure_ref = sub { 8 $next += $step; 9 $next = $from-$step, return if $next > $to; 10 $_[0] = $next; 11 return 1; 12 }; 13 return $closure_ref; 14 }
Casiano Rodríguez León