Ordinarily if you loop over an array, the loop variable becomes an alias to each element of the array. If you're looping over the results of some other expression, however, you can't always map them to some array element, so the loop variable is actually a copy.

Update: This is totally wrong! I really need to try it before I post it!

For example, in this case, we're filtering the elements of the array. Even though the elements of the original array are passed through unaltered, it doesn't alias them.

foreach my $x ( grep defined, @foo ) { $x = rand; ]

Here's an example where the elements get modified (with map) even before reaching the foreach, so the loop variable can't be an alias to the original values.

foreach my $x ( map "x$_", @foo ) { $x = rand; }

Your example with eval is another example where the expression being looped over won't be aliased to the loop variable.

You can find foreach documented in perlsyn.


In reply to Re: Reassigning $_ in loop doesn't stick by kyle
in thread Reassigning $_ in loop doesn't stick by bennymack

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.