in reply to Re: The weirdest thing....
in thread The weirdest thing....

I'm nitpicking here, but note that $|++ does not increment $| when it's 1. $| is always 1 (flush) or 0 (buffer).

That means that:

# INCORRECT sub something { $|++; # do something without buffering $|--; }
Will turn on buffering even if it was off before calling the subroutine.

Usually that's not really a problem, but if you need to revert autoflush to its previous setting, you have to remember its status yourself:

#CORRECT sub something { my $flush = $|++; # do something without buffering $| = $flush; }

Replies are listed 'Best First'.
Re^3: The weirdest thing....
by jdporter (Paladin) on May 09, 2007 at 21:36 UTC
    #CORRECT sub something { local $| = 1; # do something with autoflushing }
Re^3: The weirdest thing....
by former33t (Scribe) on May 10, 2007 at 19:25 UTC
    Yes, of course you are correct. It's probably even a smidgen faster to just assign a 1 to $| than it is to perform the computation involved in incrementing. I don't think I've ever run into a situation where I wanted autoflush on a filehandle sometimes and then go back to buffering, but I'll keep that in mind.

    I do like the use of setting the autoflush locally in your other post.

Re^3: The weirdest thing....
by ikegami (Patriarch) on May 12, 2007 at 16:15 UTC

    I'm nitpicking here, but note that $|++ does not increment $| when it's 1. $| is always 1 (flush) or 0 (buffer).

    You can use =1 instead of ++ and you wouldn't have to explain this. Be nice to your reader and use =1.