[英]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.