in reply to Doing "it" only once

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.