Provided by: libio-bufferedselect-perl_1.0-2_all bug


       IO::BufferedSelect - Line-buffered select interface


           use IO::BufferedSelect;
           my $bs = new BufferedSelect($fh1, $fh2);
               my @ready = $bs->read_line();
                   my ($fh, $line) = @$_;
                   my $fh_name = ($fh == $fh1 ? "fh1" : "fh2");
                   print "$fh_name: $line";


       The "select" system call (and the "IO::Select" interface) allows us to process multiple
       streams simultaneously, blocking until one or more of them is ready for reading or
       writing.  Unfortunately, this requires us to use "sysread" and "syswrite" rather than
       Perl's buffered I/O functions.  In the case of reading, there are two issues with
       combining "select" with "readline": (1) "select" might block but the data we want is
       already in Perl's input buffer, ready to be slurped in by "readline"; and (2) "select"
       might indicate that data is available, but "readline" will block because there isn't a
       full $/-terminated line available.

       The purpose of this module is to implement a buffered version of the "select" interface
       that operates on lines, rather than characters.  Given a set of filehandles, it will block
       until a full line is available on one or more of them.

       Note that this module is currently limited, in that (1) it only does "select" for
       readability, not writability or exceptions; and (2) it does not support arbitrary line
       separators ($/): lines must be delimited by newlines.


       new ( HANDLES )
           Create a "BufferedSelect" object for a set of filehandles.  Note that because this
           class buffers input from these filehandles internally, you should only use the
           "BufferedSelect" object for reading from them (you shouldn't read from them directly
           or pass them to other BufferedSelect instances).


       read_line ($timeout)
       read_line ($timeout, @handles)
           Block until a line is available on one of the filehandles.  If $timeout is "undef", it
           blocks indefinitely; otherwise, it returns after at most $timeout seconds.

           If @handles is specified, then only these filehandles will be considered; otherwise,
           it will use all filehandles passed to the constructor.

           Returns a list of pairs "[$fh, $line]", where $fh is a filehandle and $line is the
           line that was read (including the newline, ala "readline").  If the filehandle reached
           EOF, then $line will be undef.  Note that "reached EOF" is to be interpreted in the
           buffered sense: if a filehandle is at EOF but there are newline-terminated lines in
           "BufferedSelect"'s buffer, "read_line" will continue to return lines until the buffer
           is empty.




       Antal Novak, <>


       Copyright (C) 2007 by Antal Novak

       This library is free software; you can redistribute it and/or modify it under the same
       terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of
       Perl 5 you may have available.