Perl 函式 - select
■ 功 能
selec 函式共有兩種功能,且兩者之間並沒有關聯。
■ 第一種
• select FILEHANDLE
• select
select 函數會傳回目前被選到的輸出檔案代碼。若提供了FILEHANDLE,則會將它設定為預設的輸出檔案代碼。若write 或 print 未提供檔案代碼,則預設會到此檔案代碼。另外,和輸出相關的特殊變數將會參考此輸出檔案代碼。
例如:如果要在一個以上的輸出檔案代碼設定了相同的 top-of-form 格式,可以這樣做
select(REPORT1);
$^ = 'report1_top';
select(REPORT2);
$^ = 'report2_top';
FILEHANDLE必須是一個運算式,其值提供了真正檔案的名稱。
my $oldfh = select(STDERR); $| = 1; select($oldfh);
而某些程式撰寫人員則更愿意將其寫成以下的例子。
STDERR->autoflush(1);
■ 第二種
• select RBITS, WBITS, EBITS, TIMEOUT
select 函數是用來檢查哪個檔案descriptor已經準備好輸入或輸出,或是回報異常狀況。這個函數會以你所指定的位元遮罩來呼叫select(2),你可以用fileno及vec來建立此位元遮罩。如:
my $rin = my $win = my $ein = '';
vec($rin, fileno(STDIN), 1) = 1;
vec($win, fileno(STDOUT), 1) = 1;
$ein = $rin | $win;
如果你有很多檔案代碼需要做選擇,你可能需要以下的副程式
sub fhbits {
my @fhlist = @_;
my $bits = "";
for my $fh (@fhlist) {
vec($bits, fileno($fh), 1) = 1;
}
return $bits;
}
my $rin = fhbits(\*STDIN, $tty, $mysock);
一般的用法為
my ($nfound, $timeleft) =
select(my $rout = $rin, my $wout = $win, my $eout = $ein, $timeout);
或者先阻斷,直到某些描述已經準備完成
my $nfound =
select(my $rout = $rin, my $wout = $win, my $eout = $ein, undef);
#關鍵字 Perl 函式 - select用法;Perl 函式 - select語法;Perl 函式 - select範例;
■ Perl 其它函數
