By default, STDOUT is line-buffered (flushed by LF) when connected to a terminal, and block-buffered (flushed when buffer becomes full) when connected to something other than a terminal. Furthermore, <STDIN>
flushes STDOUT when it’s connected to a terminal.
This means
- STDOUT isn’t connected to a terminal,
- you aren’t printing to STDOUT, or
- STDOUT’s been messed with.
print
prints to the currently select
ed handle when no handle is provided, so the following will work no matter which of the above is true:
# Execute after the print.
# Flush the currently selected handle.
# Needs "use IO::Handle;" in older versions of Perl.
select()->flush();
or
# Execute anytime before the <STDIN>.
# Causes the currently selected handle to be flushed immediately and after every print.
$| = 1;