Come for the quick hacks, stay for the epiphanies. | |
PerlMonks |
perlfunc:selectby gods (Initiate) |
on Aug 24, 1999 at 22:41 UTC ( [id://165]=perlfunc: print w/replies, xml ) | Need Help?? |
selectSee the current Perl documentation for select. Here is our local, out-dated (pre-5.6) version: select - reset default output or do I/O multiplexing
select FILEHANDLE select select RBITS,WBITS,EBITS,TIMEOUT
Returns the currently selected filehandle. Sets the current default filehandle for output, if FILEHANDLE is supplied. This has two effects: first, a write() or a print() without a filehandle will default to this FILEHANDLE. Second, references to variables related to output will refer to this output channel. For example, if you have to set the top of form format for more than one output channel, you might do the following:
select(REPORT1); $^ = 'report1_top'; select(REPORT2); $^ = 'report2_top'; FILEHANDLE may be an expression whose value gives the name of the actual filehandle. Thus:
$oldfh = select(STDERR); $| = 1; select($oldfh); Some programmers may prefer to think of filehandles as objects with methods, preferring to write the last example as:
use IO::Handle; STDERR->autoflush(1);
This calls the
$rin = $win = $ein = ''; vec($rin,fileno(STDIN),1) = 1; vec($win,fileno(STDOUT),1) = 1; $ein = $rin | $win; If you want to select on many filehandles you might wish to write a subroutine:
sub fhbits { my(@fhlist) = split(' ',$_[0]); my($bits); for (@fhlist) { vec($bits,fileno($_),1) = 1; } $bits; } $rin = fhbits('STDIN TTY SOCK'); The usual idiom is:
($nfound,$timeleft) = select($rout=$rin, $wout=$win, $eout=$ein, $timeout); or to block until something becomes ready just do this
$nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);
Most systems do not bother to return anything useful in
Any of the bit masks can also be undef. The timeout, if specified, is in
seconds, which may be fractional. Note: not all implementations are capable
of returning the You can effect a sleep of 250 milliseconds this way:
select(undef, undef, undef, 0.25); WARNING: One should not attempt to mix buffered I/O (like read() or <FH>) with select(), except as permitted by POSIX, and even then only on POSIX systems. You have to use sysread() instead. |
|