1

我在 Perl 中遇到了一个问题。为了测试STDIN文件处理程序是否有东西可以立即读取,我想这样编程。

while(1)
{
     my ($l);
     if (TestCanRead(STDIN))
     {
         $l = <STDIN>;
         HandleRead($l);
     }
     else
     {
         HandleNotRead();
     }
}

或者

 while(1)
 {
     my ($l);
     $l = ReadImmediate(STDIN);
     if (defined($l))
     {
         HandleRead($l);
     }
     else
     {
          HandleNotRead();
     }

 }

有人能告诉我如何 在 Windows 系统上编写函数ReadImmediateTestCanRead吗?谢谢你。

4

1 回答 1

2

不幸的是,我没有要测试的 Windows 环境,但是 Perl 声称具有可移植性。因此,让我们假设 Unix 解决方案有效。

您想要select或围绕它的包装器。我通常使用IO::Select,它看起来像这样:

use IO::File;
use IO::Select;

my $select = IO::Select->new( \*STDIN );

while (1) {
    if (my @ready_FHs = $select->can_read(0)) {
        foreach my $FH (@ready_FHs) {
            say $FH->getline();
        }
    } else {
        say "Nothing to do; napping";
        sleep 1;
    }
}
于 2013-03-07T22:56:26.213 回答