如何测试STDIN是否有可读取的内容(Windows上的Perl)
我在Perl中遇到了一个问题。为了测试如何测试STDIN是否有可读取的内容(Windows上的Perl),windows,perl,asynchronous,filehandler,Windows,Perl,Asynchronous,Filehandler,我在Perl中遇到了一个问题。为了测试STDIN文件处理程序是否有要立即读取的内容,我想这样编程 while(1) { my ($l); if (TestCanRead(STDIN)) { $l = <STDIN>; HandleRead($l); } else { HandleNotRead(); } } 谁能告诉我如何编写函数ReadImmediate或T
STDIN
文件处理程序是否有要立即读取的内容,我想这样编程
while(1)
{
my ($l);
if (TestCanRead(STDIN))
{
$l = <STDIN>;
HandleRead($l);
}
else
{
HandleNotRead();
}
}
谁能告诉我如何编写函数ReadImmediate或TestCanRead
在Windows系统上?谢谢。不幸的是,我没有Windows环境可供测试,但Perl声称具有可移植性。因此,让我们假设Unix解决方案是有效的 您需要
选择或在其周围添加包装。我通常使用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;
}
}
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;
}
}