Manual Reference Pages - IO::BUFFEREDSELECT (3)
IO::BufferedSelect - Line-buffered select interface
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 Perls 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 Perls input buffer, ready to
be slurped in by readline; and (2) select might indicate that data is
available, but readline will block because there isnt 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
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 <B>onlyB>
use the BufferedSelect object for reading from them (you shouldnt read from
them directly or pass them to other BufferedSelect instances).
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
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 BufferedSelects buffer, read_line
will continue to return lines until the buffer is empty.
Antal Novak, <email@example.com>
COPYRIGHT AND LICENSE
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.
|perl v5.20.3 ||IO::BUFFEREDSELECT (3) ||2007-03-13 |
Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.