Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: Is it safe to append to the array you are iterating over

by DrWhy (Chaplain)
on Mar 14, 2013 at 19:03 UTC ( #1023531=note: print w/replies, xml ) Need Help??


in reply to Re: Is it safe to append to the array you are iterating over
in thread Is it safe to append to the array you are iterating over

I've decided to change my code to instead use a while loop/shift solution similar to what you suggested. It's approximately as simple as my original and doesn't have this issue of possibly depending on an undocumented implementation detail of my version of Perl.

--DrWhy

"If God had meant for us to think for ourselves he would have given us brains. Oh, wait..."

  • Comment on Re^2: Is it safe to append to the array you are iterating over

Replies are listed 'Best First'.
Re^3: Is it safe to append to the array you are iterating over
by ikegami (Pope) on Mar 16, 2013 at 19:53 UTC

    possibly depending on an undocumented implementation detail of my version of Perl.

    You most definitely are. The loop is suppose to take a list over which to iterate, but you're relying on the observable differences between that an the actual optimised implementation. You can see this by changing foreach (@arr) to what should be equivalent foreach ((),@arr).

    Either iterate over the indexes

    my @arr = qw/a b c/; for (my $i=0; $i<@arr; ++$i) { my $e = $arr[$i]; push @arr, 'd' if $e eq 'a'; push @arr, 'e' if $e eq 'b'; push @arr, 'f' if $e eq 'c'; print $e; } print "\n";

    Or use a queue

    my @arr = qw/a b c/; while (@arr) { my $e = shift(@arr); push @arr, 'd' if $e eq 'a'; push @arr, 'e' if $e eq 'b'; push @arr, 'f' if $e eq 'c'; print $e; } print "\n";

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1023531]
help
Chatterbox?
[choroba]: Corion Nice
[Corion]: Hi choroba! I'm somewhat fond of this picture - I think it is Breaking Bad-style even though I haven't watched the series at all ;)
[Corion]: Hmmm - and now that I look at it, the gallery I'm using doesn't produce non-Javascript compatible links in the sense that hotlinking to an image will only work for Javascript enabled...
[Corion]: On the other hand, maybe supporting non-Javascript isn't that much a priority, and I'm not exactly sure how I could make it work for both kinds of browsers without server-side magic

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (8)
As of 2017-02-27 08:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?






    Results (377 votes). Check out past polls.