I recently stumbled in a program over the following (appearantly working) code for recursively processing include files without using recursive functions. Note that in this particular case it is guaranteed that we won't go to infinite recursion due to include files indirectly included into themselves:
# @ctOutput : Content of some source file, containing # among others some 'include' directives foreach( @ctOutput ) { if( $_ =~ /^\s*include (.*)/ ) { open(INC, "<$1"); push @ctOutput, <INC>; # <==== !!!! close INC; } else { # process non-include lines here }

The funny part here is that @ctOutput is modified during the loop by *appending* the content of the included files at its end. Yes, I know, this looks also strange because the included lines are put at the end, and not at the place of the include statement, but in this particular application this is OK.

My question is about the modification of the LIST, which is usually not something we ought to do. But, aesthetics aside, is the construct

foreach (@x) { ..... push @x,'something'; ..... }

guaranteed to work, i.e. as long as we just extend the list at the end, will the program be portable? I personally doubt it will, but would like to know other opinions on it.

Ronald
-- 
Ronald Fischer <ynnor@mm.st>

In reply to It is weird, it is mad, but is it portable? (foreach question) by rovf

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.