などは入力を待ってブロックしてしまうが、ブロックさせるのではなく、入力が読み取り可能かどうか通知させるようにしたい。これは、パイプ、ソケット、デバイス、他のプログラムなどから読み取りを行う場合に役に立つ。
- タイムアウト値を0秒にして、selectを呼び出す。
$rin = "";
vec($rin, fileno(FH1), 1) = 1;
vec($rin, fileno(FH2), 1) =1;
vec($fin, fileno(FH3), 1) = 1;
$nfound = select($rout=$rin, undef, undef, 0);
if ($nfound) {
if (vec($rout, fileno(FH1), 1)) {
}
if (vec($rout, fileno(FH2), 1)) {
}
if (vec($rout, fileno(FH3), 1)) {
}
}
- IO::Selectモジュールは、ビットベクタ演算を隠す抽象的なレイヤを提供する。
use IO::Select;
$select = IO::Select->new();
$select->add(*FILEHANDLE);
if (@ready = $select->can_read(0)) {
}