perl-5.34.0
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.

�����勖����鴻�с����御����������⓾����������<�ゃ�˨����潟����˨��菴������障����� FILEHANDLE ������絎���������翫����˨�壔�������勐�ゃ����阪����勉�������í�˨�������<�ゃ�˨����潟����˨� 荐㊤�������障����� ��������˨�壔��2 ��ゃ�勐�号�������������障��: ��障����������<�ゃ�˨����潟����˨�����絎������ŝ���� write ��� print ��� 茵���ŝ�c����翫����勉�������í�˨�������������� FILEHANDLE ��˨�ŝ����障����� ������筝���ゃ�壔����阪����∫�c�勐����違�吾�勐����с�壔�������勐�阪�������c����˨�� �����с�������������˨�ŝ����障�����

For example, to set the top-of-form format for more than one output channel, you might do the following:

箴������違��茲���違�勐�阪�������c����˨��絲障����⓾�������若�後����㏍����í�若����������� 荐㊤����������˨��:

    select(REPORT1);
    $^ = 'report1_top';
    select(REPORT2);
    $^ = 'report2_top';

FILEHANDLE may be an expression whose value gives the name of the actual filehandle. Thus:

FILEHANDLE ��壔��絎������勉����<�ゃ�˨����潟�����������腓冴��綣���с�������障����障�������� ��ゃ�障�����篁ヤ����勉�������ŝ����勉�с��:

    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:

�����<�ゃ�˨����潟����˨�壔�<�純�������������c����ŝ����吾�с�壔����с�������◑�����������������絅純�� �����㏍�違�í�������������������������障�����; �����勉�������ɱ�翫����勉�������勖��緇���勌���� 篁ヤ����勉�������ŝ����勉�с��:

    STDERR->autoflush(1);

(Prior to Perl version 5.14, you have to use IO::Handle; explicitly first.)

(Perl �����若�吾�с�� 5.14 篁ュ����с�壔����障�����腓榊����� use IO::Handle; ��������� 綽�荀������������障�����)

Portability issues: "select" in perlport.

腱紙����с�勐�馹�: "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:

��������壔��select(2) ��激�鴻�������潟�若�˨��������絎���������������������鴻�壔�у�若�喝�冴����障��; ��������������鴻�壔�壔��fileno �� vec ���篏帥�c�⓾��篁ヤ����勉�������˨����☖�������с����障��:

    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:

茲���違�勉����<�ゃ�˨����潟����˨�� select ���茵���ŝ����������勉�с�������違�� 篁ヤ����勉�������˨����障��:

    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.

��祉�������í�勉�激�鴻�������с�壔����������������潟�勉�������ゃ�� $timeleft ��̬�������ŝ����勉�с�� select �����鴻�˨�í�潟�潟����㏍�鴻���� ��若�喝�冴�������������� $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.

��í�勉�������������鴻�壔�˨�� undef ���荐㊤�������������������с����障����� TIMEOUT ������絎���������������壔��腱���違�ф��絎�������絨���違�с����障����障�������� 羈�: �����鴻�⓾�勐��茖���с��$timeleft ���菴������������勉�с�壔�������障�������� �����勐�翫�����$timeleft ��˨�壔��絽吾�����絎������� $timeout �����������ゃ��菴���������障�����

You can effect a sleep of 250 milliseconds this way:

250 �����ɾ����� sleep �����������号��������篁ヤ����勉�������˨����☗����������障�����

    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.

select �����激�違����� (箴������違��SIGALRM) �� 緇�������莎桁�������������í�������壠��茖�箴�絖���с��������������羈���������⓾�������������� select ��勛Щ罎���с�̹�≪����� 羈������˨�ゃ����⓾�� perlport ��������с����⓾��������������

On error, select behaves just like select(2): it returns -1 and sets $!.

�����í�惹����壔��select �� select(2) ��勉����������虁�������障��: -1 ���菴�������$! �����祉����������障�����

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.

Unix ��勌賢��˨�壔��絎���������ñ���櫝�純�ŝ����若�帥����ŝ�����������綣����膓��� read ��� �����㏍����壔����������翫����с�����select(2) ��������純�宴����������<�ゃ�̬��菴医����� ���茯㏍�粋昭��炊�����筝㏍����с����������怨�������������勉����������障����� ��������壔����純�宴��������絲障����☗幻��� O_NONBLOCK �����í�違��篏帥����������у����帥�с����障����� ��������ŝ��荅括完��˨�ゃ����⓾�� select(2) ��� fcntl(2) ��������с����⓾��������������

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

罔�羣���� IO::Select ��≪�吾�ャ�若�˨� select ��吾�勉�������⓾�若�吟�若����㋘�潟����ŝ�若� ��ゃ�潟�帥�若����с�若�鴻�����箴������障��; 筝祉�ɾ����宴�壔�������������鴻�壔�勌��篋���� �����⓾����������������с�����

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.

茘☗��: �����������>����� I/O (read ��� readline) �� select ��� 羞激����☖戎��c�⓾�壔�������障�����(箴�紊�: POSIX ��ц�������������⓾�����綵≪�т戎������ POSIX ��激�鴻�������с����������������翫�������ゃ����障��)��� 篁c�������� sysread ��� 篏帥����ŝ�������違�ŝ����障��������

Portability issues: "select" in perlport.

腱紙����с�勐�馹�: "select" in perlport���