http://qs1969.pair.com?node_id=11129658


in reply to Re: perlbrew: Command [ ... ] terminated with exit code 0 ($? = 13)
in thread perlbrew: Command [ ... ] terminated with exit code 0 ($? = 13)

Ye. For sure. Thanks!
If doesn't throw a warning if I scroll whole output.

But if I try with slightly changed line:
perlbrew exec perl -wle 'print " A" x 1e0 for 1 .. 1e2' | less -S
There is no warning, although I didn't scroll the whole output.

Replies are listed 'Best First'.
Re^3: perlbrew: Command [ ... ] terminated with exit code 0 ($? = 13)
by haukex (Archbishop) on Mar 15, 2021 at 11:15 UTC
    But if I try with slightly changed line:
    perlbrew exec perl -wle 'print " A" x 1e0 for 1 .. 1e2' | less -S
    There is no warning, although I didn't scroll the whole output.

    perl -wle 'print " A" x 1e0 for 1 .. 1e2' is 300 bytes, while perl -wle 'print " A" x 1e3 for 1 .. 1e2' is 200100 bytes. Since you're piping the output of perl to another program, perl's output isn't line-based (see e.g. Suffering from Buffering), and so what I'm fairly certain is happening is that perl is simply outputting the 300 bytes in one go. Update: Because perl -wle '$|++; print " A" x 1e0 for 1 .. 1e2' isn't killed by SIGPIPE either, it may also have something to do with how much data a pipe can buffer, but I'm not an expert on that.

      I think Linux pipes can usually hold 128 KiB. This surely configurable.

      Update:

      $ perl -e' $|=1; $SIG{PIPE} = sub { die("SIGPIPE") }; print "x" x 1..15_328; ' | sleep 0.25 # Child needs to be alive when the print occurs. $ perl -e' $|=1; $SIG{PIPE} = sub { die("SIGPIPE") }; print "x" x 1..15_329; ' | sleep 0.25 SIGPIPE at -e line 3.

      It's 15,328 on my Ubuntu (over WSL2) system. What a weird number. That's 1,056 bytes less than 16 KiB (16,384).

      Seeking work! You can reach me at ikegami@adaelis.com