Good point Errto, you drove me to dig out the Perl Cookbook
recipe 7.23, which, to my horror, also does a sysread() of
one character at a time (and with no performance caveat).
I wonder if anyone has encapsulated a nice clean buffering
scheme to work in harness with select() and sysread()? Update: quick look on CPAN found nothing, but Lincoln Stein's book "Network Programming with Perl" (Chapter 13) features an IO::Getline module that seems to be what I'm after, namely "line-oriented reading from sockets/handles with access to internal buffer".
One important point made in this recipe is that you
must use unbuffered sysread() (and not the buffered
I/O functions) with select() because select's response
does not reflect user level buffering.
Update: Found this
interesting bit of history
from comp.lang.perl.moderated (15-Jan-1999) describing a mythical sysreadline() function requested by Larry but, alas, never implemented.
|