in reply to perl / embperl -- IPC::Open3;

Just looking at your embperl script, and assuming you copy&pasted it properly, it should fail because you have use strict enabled, but have a few variables without scope.
Global symbol "$escmode" requires explicit package name at ./1086395.p +l line 7. Global symbol "%http_headers_out" requires explicit package name at ./ +1086395.pl line 8.

It's conceivable that the cgi is trying to print this error, but it gives your bad filedescriptor error instead. Sometimes error reporting can be deceiving.


I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

Replies are listed 'Best First'.
Re^2: perl / embperl -- IPC::Open3;
by djlerman (Beadle) on May 19, 2014 at 20:22 UTC

    $escmode and %http_headers_out are a part of and used in embperl. I don't think they need to be defined separately.

    Either way I removed them both from the script and I still get the same error

      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 mas +sive 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"; -]