我在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系统上编写函数ReadImmediate或TestCanRead吗? 谢谢。
不幸的是,我没有一个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; } }