Sam Tregar # On Thu, 8 Nov 2001, Dan Sugalski wrote: # # > Gack. Looks like a mis-placed optimization in perl 5. The # list of a foreach # > is *supposed* to flatten at loop start and be static. # Apparently not. :) # > # > Care to file the perl 5 bug report, or shall I? # # It's not a bug. Check out the "Foreach Loops" section in # perlsyn, where # you'll find: # # If any element of LIST is an lvalue, you can modify it by # modifying VAR inside the loop. Conversely, if any element # of LIST is NOT an lvalue, any attempt to modify that # element will fail. In other words, the "foreach" loop # index variable is an implicit alias for each item in the # list that you're looping over.
That doesn't support your argument. The point is that in the statement: foreach(@array) { ... } @array should only be evaluated once, at the beginning of the loop. In effect (using := here, but otherwise Perl 5 code): my @arraycopy; for(my $i=0; $i < @array; $i++) { $arraycopy[$i] := $array[$i]; } foreach(@arraycopy) { ... } except without the actual overhead of having an @arraycopy. --Brent Dax [EMAIL PROTECTED] Configure pumpking for Perl 6 When I take action, I'm not going to fire a $2 million missile at a $10 empty tent and hit a camel in the butt. --Dubya