in reply to what does $|++ do here?

Though it's considered bad style, it does work. The $| special variable is basically an on/off switch for output buffering. When it is false (in the Boolean sense - default), print output is buffered, and doesn't get flushed, usually, until after a '\n' newline, or until the buffer fills up. Set that to true (again in the Boolean sense), and buffering is turned off, so that the script outputs on each print call, not waiting for a newline or full buffer.

This special variable also has a special characteristic: It flip-flops like a switch when you increment it. That's what's being done in your sample script. But most people who care about readability and style prefer $| = 1;. It would be a "best practice" if you also localized the effects of the change (so that they don't ripple into other parts of your script where the behavior is unnecessary, or worse, undesirable. To do that, try:

#....... irrelevant code not included... } else { local $| = 1; while( ! waitpid( $pid, WNOHANG ) ) { # ......

Instead of putting it at the top of the script. If the script grows larger, you're not going to have to worry about undesirable behavior finding its way into other places.


Dave

Replies are listed 'Best First'.
Re^2: what does $|++ do here?
by JavaFan (Canon) on May 30, 2011 at 10:19 UTC
    It flip-flops like a switch when you increment it.
    If only.

    It's worse. It acts like a flip-flop when you decrement it, but not when you increment.

    perl -wE 'say $|++ for 1 .. 5; say "--"; say $|-- for 1 .. 5' 0 1 1 1 1 -- 1 0 1 0 1
Re^2: what does $|++ do here?
by deep3101 (Acolyte) on May 30, 2011 at 16:39 UTC
    Thanks a lot Dave i'll take that piece of advice.