BrowserUk writes:

Why while ( ($_) = $iter->() ) { ... rather than while ($_ = $iter->() ) { ...?

Since your iterator function always returns the current element value, the while loop would terminate prematurely if one of the element values contained a non-truth value (undef, 0, ""). Even if defined() was used, the loop would terminate prematurely on an undef value. Using ($_) causes the list value to be checked for 'truthfullness', meaning that the loop will only terminate when the iterator returns the empty list. This is the desired behaviour, is it not? (Your iterator list does return () when it is complete)

BrowserUk writes:

As for the range operator building a list in list assignment. Yes, of course it does, but it is just a convenient way to set up some test data and doesn't having any bearing on the use of the iterator?

The array remains referenced within the iterator subroutine. Therefore, the memory being used by the array remains referenced. 1000000 scalars, even as simple integers, take up quite a bit of space. I estimate that 1000000 integer scalars take up at least 10 Mbytes of store. Using the range operator for very large ranges, outside of the "for (1 .. 1000000) {" case is extremely expensive.

UPDATE: I missed the point of the array. For an explanation of the striken out text, see BrowserUk's response.


In reply to Re: Re: Re: Re: Starting foreach at an arbitrary position by MarkM
in thread Starting foreach at an arbitrary position 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.