Actually, map doesn't know that. You can write something like @x = map { () } @y; and then the resulting list is empty. You can also do something like @x = map { ($_, func($_)) } @y; in which case it's twice as large as the input list. Or something like @x = map { split } @y; in which case it's entirely up in the air how many elements the result list will have. If you do @x = map /re(g)(ex)/, @y;, input strings that don't match the regex will leave no trace in the output list, while those that do produce two entries each. And if you add a /g to the regex, even the latter constant becomes random.

I have no idea of the perl guts, but my guess is that it's because in a for loop, the array modification is an explicit operation. It's an independent op which needs to deduce the address to a scalar inside the array, and so it does so for each iteration, over and over. The map on the other hand creates a list implicitly and knows to keep track of where to dump the next value(s).

Anyway, that's just an educated guess. If anyone who knows better can offer some enlightenment, I'll be glad to learn more.

Makeshifts last the longest.


In reply to Re^5: Perl Drag Racing - sum/delta list by Aristotle
in thread Perl Drag Racing - sum/delta list by John M. Dlugosz

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.