我在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();
}
}
有人可以告诉我如何编写函数 ReadImmediate 或 TestCanRead 在Windows系统上?谢谢。
答案 0 :(得分: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;
}
}