Go to the first, previous, next, last section, table of contents.

select

`select(FILEHANDLE)'
`select'
現在 select されているファイルハンドルを返す。 FILEHANDLE を指定すれば出力のデフォルトファイルハンドルをセットする。 これには二つの効果がある。 write または print をファイルハンドルなしで用いると、 デフォルトのこの FILEHANDLE が用いられる。 また、出力に関連づけられた変数への参照は、 この(select で指定した)出力チャンネルを参照する。 例えば、 1 以上の出力チャンネルについてフォーマットの先頭行をセットしなければならない時は、
select(REPORT1);
$^ = 'report1_top';
select(REPORT2);
$^ = 'report2_top';
のようにすればよい。 FILEHANDLE は 実際のファイルハンドルの名前を値として持つ expressionでもよい。 したがって、以下のように使える。
$oldfh = select(STDERR); $| = 1; select($oldfh);
`select(RBITS,WBITS,EBITS,TIMEOUT)'
bitmasks を指定してシステムコール select をコールする。 bitmasksfileno()vec() を用いて 以下のようにして得ることができる。
$rin = $win = $ein = ";
vec($rin,fileno(STDIN),1) = 1;
vec($win,fileno(STDOUT),1) = 1;
$ein = $rin | $win;
多くのファイルハンドルを select したい時は サブルーチンを書いた方がいいかもしれない。
sub fhbits {
    local(@fhlist) = split(' ',$_[0]);
    local($bits);
    for (@fhlist) {
     vec($bits,fileno($_),1) = 1;
    }
    $bits;
}
$rin = &fhbits('STDIN TTY SOCK');
通常の使い方は、
($nfound,$timeleft) =
  select($rout=$rin, $wout=$win, $eout=$ein, $timeout);
または何かが ready になるまでブロックするには、
$nfound = select($rout=$rin, $wout=$win,
    $eout=$ein, undef);
である。 bitmasks はいずれも undef にすることができる。 TIMEOUT を指定する時は秒単位で、小数点も可能である。 注意:
インプリメントによっては $timeleft を返す機能は利用できない場合がある。
その場合は常に指定した $timeout と同じ値で $timeleft が返る。

Go to the first, previous, next, last section, table of contents.