close

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  其它函數

▶ Perl 函式|函數|指令集

 


arrow
arrow
    全站熱搜

    News123 發表在 痞客邦 留言(0) 人氣()