in reply to Re^3: Buffered, bruised and broken
in thread Buffered, bruised and broken
In this case, because STDOUT was made "hot" by setting $| to 1, perl flushed its buffer to the system every time "\n" was written.
That's not quite true. By setting $| to 1, Perl flushes the buffer every time anything is written. There are three states, not two:
$ strace perl -e'$|=0; print for "a", "b\n", "c\n"' >/dev/tty write(1, "ab\n", 3) = 3 write(1, "c\n", 2) = 2 $ strace perl -e'$|=0; print for "a", "b\n", "c\n"' >/dev/null write(1, "ab\nc\n", 5) = 5 $ strace perl -e'$|=1; print for "a", "b\n", "c\n"' write(1, "a", 1) = 1 write(1, "b\n", 2) = 2 write(1, "c\n", 2) = 2
|
|---|