in reply to Re^2: why doesn't "my ($a,$b)" return a list?
in thread why doesn't "my ($a,$b)" return a list?

just recently I got bitten by trying to nest two while (each ) on the same hash, because the iteration-pointer is tied to the hash
If you do not change the hash in the loop, you can use your own iterator like that:
sub hash_iterator { my %h = @_; return sub { each %h; } } # make_iterator my %test = (k1 => 'v1', k2 => 'v2', k3 => 'v3', 'k-last' => 'v-last'); my $it1 = hash_iterator(%test); my $it2 = hash_iterator(%test); while(<>){ print join ':',($it1->())[0,1]; print ';',join ':',($it2->())[0,1]; print ' - ',join ':',($it2->())[0,1]; print "\n"; }

Replies are listed 'Best First'.
Re^4: why doesn't "my ($a,$b)" return a list?
by LanX (Saint) on Aug 20, 2010 at 13:35 UTC
    sure, but thats why I was writing my own enumerator function.

    by supplying the variables as arguments I can naturally bind the iterator to them without the need to generate extra interators.

     while( enum @a => state($value,$index) ) {...}

    Actually an extra option for "each" to work like flip-flop would be the best solution.

    Cheers Rolf