in reply to Perl reads minimum 8KB from files. Can this be lowered?

The size of reads for buffered I/O is configurable (since 5.014), but only when Perl is compiled.

You could use syread instead of buffered I/O.

$ strace perl -e'1 while read(STDIN, $buf, 512)' <a 2>&1 | grep 'read( +0' read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 8192) = 8192 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 8192) = 8192 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 8192) = 3616 read(0, "", 8192) = 0 $ strace perl -e'1 while sysread(STDIN, $buf, 512)' <a 2>&1 | grep 're +ad(0' read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..., 512) = 512 read(0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 512) = 32 read(0, "", 512) = 0

Replies are listed 'Best First'.
Re^2: Perl reads minimum 8KB from files. Can this be lowered?
by sectokia (Friar) on Apr 09, 2022 at 02:43 UTC
    This seems the best solution and fixes the problem for me.