如何testingSTDIN是否有东西可读(Windows上的Perl)

我在Perl中遇到了一个问题。 要testingSTDIN文件处理程序是否有立即读取的东西,我想这样编程。

 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吗? 谢谢。

不幸的是,我没有一个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; } }