I seems that perl does not flush a printed string without seeing a NL character, is that the right interpretation of this peculiar behavior?Correct. It's the expected behaviour of STDOUT to operate in buffered mode. NL marks the end of the line and then the whole line is printed.
Can this be considered as a bug then?Maybe not, with the weak excuse that it has been always working like that.
Buffering has some performance advantages when giving bigger chunks of characters to the OS rather than calling some I/O function of the OS for each individual character.
You can switch off buffering, setting $| to true.
perl -e '$|=1; for($i=0; $i < 10; $i++){sleep 1; print $i;}'
STDERR is unbuffered by default, so this works too (but uses a different stream):
perl -e 'for($i=0; $i < 10; $i++){sleep 1; print STDERR $i;}'
Here's the obligatory article: Suffering from Buffering
In reply to Re: The delay of printing encountered using loop
by Perlbotics
in thread The delay of printing encountered using loop
by Diamondust
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |