【发布时间】:2018-04-13 04:48:33
【问题描述】:
我想临时将标准输出重定向到内存变量。打印正确地重定向到我的变量,但不是管道的输出(在我的示例中为 bc)。到底是怎么回事?
#!/usr/bin/perl
my $stdout_sink;
open(my $orig_stdout, ">&STDOUT") || die $!;
close STDOUT;
open(STDOUT, ">", \$stdout_sink) || die $!;
# produce some output in different ways
print "before bc\n"; # ok
open my $fh, "| bc";
print $fh "2+2\n"; # not ok
close $fh;
close STDOUT;
open(STDOUT, ">&", $orig_stdout) || die $!;
print "$stdout_sink";
实际输出为:
before bc
预期输出:
before bc
4
【问题讨论】:
-
bc被分叉并作为具有独立 STDOUT 的单独进程运行。您需要使用类似IPC::Run3的方式运行它来捕获结果。
标签: perl