加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何读写Perl中的管道?

发布时间:2020-12-15 21:12:10 所属栏目:大数据 来源:网络整理
导读:我是一个Perl noob,所以请原谅这个基本的问题.我需要修改现有的Perl程序.我想通过外部程序管道一个字符串(可以包含多行),并读取该程序的输出.所以这个外部程序用来修改字符串.我们只需要使用cat作为过滤器程序.我尝试这样,但它不工作. (cat的输出到stdout,而
我是一个Perl noob,所以请原谅这个基本的问题.我需要修改现有的Perl程序.我想通过外部程序管道一个字符串(可以包含多行),并读取该程序的输出.所以这个外部程序用来修改字符串.我们只需要使用cat作为过滤器程序.我尝试这样,但它不工作. (cat的输出到stdout,而不是被perl读取.)
#!/usr/bin/perl

open(MESSAGE,"| cat |") or die("cat failedn");
print MESSAGE "Line 1nLine 2n";
my $message = "";
while (<MESSAGE>)
{
    $message .= $_;
}
close(MESSAGE);
print "This is the message: $messagen";

我已经读过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 "$in";
    $r = <CHLD_OUT>;
    print "Got $r from childn";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读