[英]perl script keeps reading data from STDIN
我有2个脚本用于任务。
第一个输出数据行(以RT / LF终止)到STDOUT。
第二个保持从STDIN读取数据,以便通过以下方式进一步处理:
use strict;
my $dataline;
while(1) {
$dtaline = "";
$dataline = <STDIN>;
until( $dataline ne "") {
sleep(1);
$dataline = <STDIN>;
}
#further processing with a non-empty data line follows
}
print "quitting...\n";
我使用管道将输出从第一个重定向到第二个:perl scrt1 | perl scpt2。
但是我对这两个scpts的问题是,如果在初始加载后没有数据,第二个scpt看起来就像第一个scpt的初始数据行一样。
不知道有没有相似经历的人可以帮助一下吗?
谢谢。
你似乎把它变得比它需要的复杂得多。 Perl通常使用阻塞I / O,这意味着在完整的输入行之前<STDIN>
将不会返回。
use strict;
use warnings; # use this too
while (my $dataline = <STDIN>) {
#further processing with a non-empty data line follows
}
print "quitting...\n";
当没有更多输入时(在您的示例中,当scrt1退出时), <STDIN>
返回undef
,这将退出while
循环。 (Perl为while ($var = <>)
循环添加了一个隐式defined
测试。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.