select

Returns the currently selected filehandle. If FILEHANDLE is supplied,
sets the new current default filehandle for output. This has two
effects: first, a write or a print 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:

Most systems do not bother to return anything useful in $timeleft, so
calling select() in scalar context just returns $nfound.

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 $timeleft. If not, they always return
$timeleft equal to the supplied $timeout.

Note that whether select gets restarted after signals (say, SIGALRM)
is implementation-dependent. See also perlport for notes on the
portability of select.

On error, select behaves just like select(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 subsequent read
would block. This can be avoided if you always use O_NONBLOCK on the
socket. See select(2) and fcntl(2) for further details.

The standard IO::Select
module provides a user-friendlier interface
to select, mostly because it does all the bit-mask work for you.

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.