Yes, it's safe to do that, if what you want is what it happens to do.

What you get with a foreach loop is that it does the first element in the array, then the second, then the third, and so on, until it runs out. If you change the elements as you go, it doesn't bother Perl; on the second iteration it gives you whatever the second element is at that moment, regardless of what it was when you started the loop. So for example:

@a = (0,1,2); foreach $element (@a) { print $element, "\n"; $a[1] = 'foo'; }

This prints out 0, foo, 2.

Similarly, the loop ends only when Perl runs out of elements, and if you add elements in the middle of the loop, Perl will iterate over the new elements also, until it reaches the current end of the array. This code is an infinite loop:

	@a = (1,2,3);
	foreach $element (@a) {
	  print $element, "\n";
	  push @a, $element+3;
	} 
	  

This prints 1 2 3 4 5 6 7... and so on forever, because it keeps extending the array, and Perl never gets to the end.


In reply to Re: recurse directories? by Dominus
in thread recurse directories? by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.