in reply to Re^2: Iterator Problem with recursion
in thread Iterator Problem with recursion

Hi,

well - I know of this restriction, and it may do bite me here sometime later. But I do not see how the each iterator, bound to %$rul should clash with the iteration of for(@out).

Bye
 PetaMem
    All Perl:   MT, NLP, NLU

Replies are listed 'Best First'.
Re^4: Iterator Problem with recursion
by tlm (Prior) on Apr 26, 2005 at 17:49 UTC

    Fletch and splinky are right. Try this toy example and you will see it clearly:

    use strict; use warnings; my $count = 0; my $max_output = 7; sub rec { my $hash = shift; my $level = shift; return if $level > 1; while ( my ( $k, $v ) = each %$hash ) { exit 0 if ++$count > $max_output; # backstop print "$level: $k\n"; rec( $hash, $level + 1 ); } } rec( { foo => 1, bar => 2, baz => 3 }, 0 ); __END__ 0: bar 1: baz 1: foo 0: bar 1: baz 1: foo 0: bar
    Notice how, when the recursion level is 1, the iterator doesn't visit 'bar' (because it was already visited at level 0). Instead, it visits the remaining keys (thereby exhausting each), and returns (since in this case, all further recursion stops at level 2). Once level 1 returns control to level 0, each starts again from the top.

    the lowliest monk

      I know and agree, but as I mentioned, the each loop is not the problem here, but actually our case is something along the lines of
      sub rec { my $hash = shift; my $level = shift; return if $level > 1; while ( my ( $k, $v ) = each %$hash ) { exit 0 if ++$count > 10; print "$level: $k => $v\n"; for (1..3) { rec( $hash, $level + 1 ); print "$_\n"; } } }
      where the for(1..3) loop is not stepped through, but stuck. In this code, wading through the loop works.

      Bye
       PetaMem
          All Perl:   MT, NLP, NLU