in reply to Re^2: printf in if-statement
in thread printf in if-statement
I don't understand why this buffering occurs in this case as normally it doesn't
I'd say it's the other way around: buffering is the default behaviour. Only under certain circumstances, the behaviour is changed, for example when the handle is connected to a terminal (like STDOUT, typically). In this case, line-buffering (as opposed to block-buffering) is used, because an interactive mode of operation is assumed.
You could enable auto-flushing, though (on any handle):
use IO::Handle; open my $fh, ">", "test.out" or die $!; $fh->autoflush(); print $fh "..."; # is being written immediately
(see also Re: Troubles with do...while loop and sleep (line- vs. block-buffered))
|
|---|