微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获得Perl管道的输出?

以下代码工作正常:
open( PIPE,'-|','ant' );
for( <PIPE> ) {
    print;
}

但是,它没有做我想要的.由于Ant构建可能需要5分钟,我希望逐行看到输出.
相反,我在流程结束时获得了整个输入.

使用Perl调试器查看它,Perl等待’for’语句,直到Ant终止.这是为什么?

解决方法

只是为了完整性(问题在Uri的回答评论中得到解决)问题出现了,因为for表达式评估<>列表上下文中的运算符( see),等效于以下内容
foreach $line (@lines = <PIPE>) {
    print $line;
}

在列表上下文中,<>运算符尝试从其输入读取所有行以指向列表 – 并且输入来自进程,它将阻塞直到进程结束.只有在它之后它才会进入循环体.

替代语法

while( <PIPE> ) {           
    print; 
}

相当于

while(  $line = <PIPE> ) {
    print $line;
}

即,它在每次循环迭代中消耗来自输入的每一行,这是在这种情况下想要做的事情.

原文地址:https://www.jb51.cc/Perl/171866.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐