我正在编写一个用于过滤的简单程序
来自管道的输入。大部分输入作为输出发送
无动于衷。它的一部分被修改或用于提取
信息。最简单的形式-无所作为-
程序filter
是:
$|++;
while (<>) {
print;
}
主程序有时会输出其进度更新
任务,通过使用覆盖相同的视觉内容
以回车结尾的行。将此类内容投放到
filter
阻止所有输出:
$ perl -e '$|++; print ++$a, "\r" and sleep 1 while 1' | filter
有没有一种简单的方法可以在同一循环中读取这些行
时尚,还是应该采用sysread
的方式?我在找
类似的事情,如果可能的话
将记录分隔符设置为“ \n
或 \r
”。
答案 0 :(得分:8)
如果输入的大小不是很大,那么效率是一个问题,那么此版本的filter
会更可靠
while (!eof(STDIN)) {
$_ .= getc(STDIN);
if (/[\r\n]/) {
# manipulate $_, if desired
print;
$_ = "";
}
}
print;