Maybe it works, maybe it doesn't. But you're definitely in the territory of "unpredictable behaviour". | [reply] [Watch: Dir/Any] |
But you're definitely in the territory of "unpredictable behaviour"
I may be being somewhat picky (or I may even be downright wrong), but I don't see any "unpredictable behaviour" there. I agree that one needs to be careful when modifying an array by iterating over the same array, but the following does behave predictably:
use strict;
use warnings;
my @array = ('a');
foreach (@array) {
push @array,'a';
print"@array\n";
sleep(1); # so we can absorb what's happening
}
Cheers, Rob
| [reply] [Watch: Dir/Any] [d/l] |
It's not "unpredictable" in the sense of being random but it is undefined in the sense that it is not specified in the documentation and could potentially change in a future release. Quoting perlsyn:
If any part of LIST is an array, foreach will get very confused if you add or remove elements within the loop body, for example with splice. So don't do that.
I should add for the record that I once asked the same question myself.
| [reply] [Watch: Dir/Any] |