What's the scope of your ONCE? Or rather how would you specify what is the scope?

Suppose you had a code like this:

for my $file (@files) { open FH, '<', $file or die "$!\n"; while ( <FH> ) { next if $_ eq 'foo'; # Where foo can only appear once in the file print; } close FH }
How do you expect to be able to specify whether the 'foo' is supposed to appear only once in each file or just once during one invocation of the script? Keep in mind that if it was the first case you definitely can't rewrite the optree. Except if you rewrote it so that it would rewrite itself to the original state at the loop's end.

And actually ... what is the loops end? Suppose the code is in a subroutine and that subroutine is called recursively by the code in the loop. Now the optree of the "outer invocation" should look like this and the optree of the "inner invocation" like that? This way lies madness if you ask me.

If the condition is expensive, use a flag. You can scope the flag variable any way you need and I would definitely not worry about the penalty caused by evaluating a scalar in bool context and executing a single AND instruction. That's negligible in all but the tightest loops.

Jenda
XML sucks. Badly. SOAP on the other hand is the most powerfull vacuum pump ever invented.


In reply to Re: Doing "it" only once by Jenda
in thread Doing "it" only once by Limbic~Region

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.