Returns the currently selected filehandle. If FILEHANDLE is supplied, sets the new current default filehandle for output. This has two effects: first, awrite or aprint without a filehandle default to this FILEHANDLE. Second, references to variables related to output will refer to this output channel.
For example, 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:
my $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:
STDERR->autoflush(1);(Prior to Perl version 5.14, you have touse IO::Handle; explicitly first.)
Portability issues:"select" in perlport.
This calls theselect(2) syscall with the bit masks specified, which can be constructed usingfileno andvec, along these lines:
my $rin = my $win = my $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 may wish to write a subroutine like this:
sub fhbits { my @fhlist = @_; my $bits = ""; for my $fh (@fhlist) { vec($bits, fileno($fh), 1) = 1; } return $bits;}my $rin = fhbits(\*STDIN, $tty, $mysock);The usual idiom is:
my ($nfound, $timeleft) = select(my $rout = $rin, my $wout = $win, my $eout = $ein, $timeout);or to block until something becomes ready just do this
my $nfound = select(my $rout = $rin, my $wout = $win, my $eout = $ein, undef);Most systems do not bother to return anything useful in$timeleft, so callingselect in scalar context just returns$nfound.
Any of the bit masks can also beundef. The timeout, if specified, is in seconds, which may be fractional. Note: not all implementations are capable of returning the$timeleft. If not, they always return$timeleft equal to the supplied$timeout.
You can effect a sleep of 250 milliseconds this way:
select(undef, undef, undef, 0.25);Note that whetherselect gets restarted after signals (say, SIGALRM) is implementation-dependent. See alsoperlport for notes on the portability ofselect.
On error,select behaves just likeselect(2): it returns-1 and sets$!.
On some Unixes,select(2) may report a socket file descriptor as "ready for reading" even when no data is available, and thus any subsequentread would block. This can be avoided if you always useO_NONBLOCK on the socket. Seeselect(2) andfcntl(2) for further details.
The standardIO::Select module provides a user-friendlier interface toselect, mostly because it does all the bit-mask work for you.
WARNING: One should not attempt to mix buffered I/O (likeread orreadline) withselect, except as permitted by POSIX, and even then only on POSIX systems. You have to usesysread instead.
Portability issues:"select" in perlport.
Perldoc Browser is maintained by Dan Book (DBOOK). Please contact him via theGitHub issue tracker oremail regarding any issues with the site itself, search, or rendering of documentation.
The Perl documentation is maintained by the Perl 5 Porters in the development of Perl. Please contact them via thePerl issue tracker, themailing list, orIRC to report any issues with the contents or format of the documentation.