in reply to Re: dereferencing hash within a hash within an array
in thread dereferencing hash within a hash within an array

If I understand you correctly you expect
my $x = 10; for my $i (1 .. $x) { $x = 1; print $i; }
to execute only once. That would be the case if the above was equivalent to
my $x = 10; for (my $i = 1; $i <= $x; $i++) { $x = 1; print $i; }
, but it isn't. Recall that the non-C-style for (aka foreach) is a list iterator. 1 .. $x is a list. Compare with   my @foo = 1 .. $x; If you'd now do   foreach (@foo) { ... } you wouldn't expect foreach to act any differently upon modification of $x.

(Afaik for (EXPR .. EXPR) is nowadays optimized to not build a list, but that's irrelevant from a language point of view.)

Hope I've helped,
ihb