in reply to The weirdest thing....

I'm guessing you need to flush STDOUT.

$|++;

Replies are listed 'Best First'.
Re^2: The weirdest thing....
by Joost (Canon) on May 09, 2007 at 21:32 UTC
    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; }
      #CORRECT sub something { local $| = 1; # do something with autoflushing }
      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.

      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.