I don't follow how this is relevant to the question at hand. open3 sets up pipes to the child process, and those pipes are read in the test sub. test in turn prints to the parent STDOUT, which has been redirected to a scalar. Why would a redirect in the parent have any impact on the child's I/O?
Update: Mucking about, I discovered this seems to be associated with localizing the file handle.
#!/usr/bin/perl -w
use strict;
use IPC::Open3;
use Symbol 'gensym';
my @queue = ("Line 1\nThis is the first line\n",
"Line 2\nThis is the second line\n",
"Line 3\nThis is the third line\n",
);
for my $line (@queue) {
local *STDOUT;
open LOG, '>', \my $stdout or die "Can't catch LOG: $!";
my $pid = open3(my $wtr, my $rdr, undef, 'cat', '-v');
print $wtr $line;
close $wtr;
my $content=do{local $/;<$rdr>};
waitpid( $pid, 0 );
close LOG;
}
leaks the output, but commenting line 13 causes the capture to operate properly.
|