我是一个Perl noob,所以请原谅这个基本的问题.我需要修改现有的Perl程序.我想通过外部程序管道一个字符串(可以包含多行),并读取该程序的输出.所以这个外部程序用来修改字符串.我们只需要使用cat作为过滤器程序.我尝试这样,但它不工作. (cat的输出到stdout,而不是被perl读取.)
#!/usr/bin/perl open(MESSAGE,"| cat |") or die("cat Failed\n"); print MESSAGE "Line 1\nLine 2\n"; my $message = ""; while (<MESSAGE>) { $message .= $_; } close(MESSAGE); print "This is the message: $message\n";
我已经读过Perl不支持它,因为它可能会陷入僵局,我可以理解它.但是我该如何做呢?
解决方法
您可以使用
IPC::Open3实现与孩子的双向通信.
use strict; use IPC::Open3; my $pid = open3(\*CHLD_IN,\*CHLD_OUT,\*CHLD_ERR,'cat') or die "open3() Failed $!"; my $r; for(my $i=1;$i<10;$i++) { print CHLD_IN "$i\n"; $r = <CHLD_OUT>; print "Got $r from child\n"; }
原文地址:https://www.jb51.cc/Perl/172583.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。