select - perldoc.perl.org

Perl Programming Documentation
Download Perl
Explore

Manual

- Overview
- Tutorials
- FAQs
- History / Changes
- License

Reference

- Language
- Functions
- Operators
- Special Variables
- Pragmas
- Utilities
- Internals
- Platform Specific

Modules

- A • B • C • D • E
- F • G • H • I • L
- M • N • O • P • S
- T • U • X

Tools

- Preferences

# select

Perl 5 version 26.0 documentation
Go to top
Show recent pages
Recently read

# select

Perl functions A-Z | Perl functions by category | The 'perlfunc' manpage

- select FILEHANDLE

- 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:

          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 to `use IO::Handle;` explicitly first.)

  Portability issues: select in perlport.

- select RBITS,WBITS,EBITS,TIMEOUT

  This calls the select(2) syscall with the bit masks specified, which can be constructed using fileno and vec, 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 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` .

  You can effect a sleep of 250 milliseconds this way:

          select(undef, undef, undef, 0.25);

  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 readline) with select, except as permitted by POSIX, and even then only on POSIX systems. You have to use sysread instead.

  Portability issues: select in perlport.