FAQ
Ack... Sorry about the last email with unreadable code. My email system does something strange with some text. Here is the email again with readable code.


Hello.

I have a sample program in 2 formats perl & embperl.

The perl version works as a CGI but the embperl version does not work.

Any suggestions or pointers to solutions would be appreciated


OS: Linux version 2.6.35.6-48.fc14.i686.PAE (...) (gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) ) #1 SMP Fri Oct 22 15:27:53 UTC 2010


perl working script:

#!/usr/bin/perl
use warnings;
use strict;
use IPC::Open3;
use Symbol 'gensym';

print "Content-type: text/plain\n\n";

my $cmd = '/bin/ls';

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 "STDOUT: ", @outlines, "\n";
print "STDERR: ", @errlines, "\n";

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


print "child_exit_status: $child_exit_status\n"








embperl non-working script:

Here is the output I receive.
STDERR: ls: write error: Bad file descriptor

child_exit_status: 2


[-
use warnings;
use strict;
use IPC::Open3;
use Symbol 'gensym';

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

my $cmd = '/bin/ls';

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";
-]

Search Discussions

  • Donavon Lerman at May 22, 2014 at 10:04 pm
    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";
    -]

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupembperl @
categoriesmodperl, perl
postedMay 19, '14 at 5:40p
activeMay 22, '14 at 10:04p
posts2
users1
websiteperl.apache.org

1 user in discussion

Donavon Lerman: 2 posts

People

Translate

site design / logo © 2018 Grokbase