With the help of user ikegami over at stackoverflow. The following solutions 
works.

[-
 use warnings;
 use strict;
 use IPC::Open3;
 use POSIX;

 $http_headers_out{'Content-Type'} = "text/plain";

 my $cmd = 'ls';

open(my $fh, '>', '/dev/null') or die $!;
 dup2(fileno($fh), 1) or die $! if fileno($fh) != 1;

 local *STDOUT;
 open(STDOUT, '>&=', 1) or die $!;

 my $pid = open3(*HIS_IN, *HIS_OUT, *HIS_ERR, $cmd);

 close(HIS_IN);  # give end of file to kid, or feed him

 my @outlines = <HIS_OUT>;              # read till EOF
 my @errlines = <HIS_ERR>;              # XXX: block potential if massive
 print OUT "STDOUT: ", @outlines, "\n";
 print OUT "STDERR: ", @errlines, "\n";

 waitpid( $pid, 0 );
 my $child_exit_status = $? >> 8;

 print OUT "child_exit_status: $child_exit_status\n";
-]

Reply via email to