You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by erich oliphant <ol...@hotmail.com> on 2000/09/07 03:45:24 UTC

Passing STDIN to subprogram

I am replacing a CGI shell script with a modperl script.  At one point in 
the shell script subprogram is called.  The HTML form that calls the script 
calls it via a POST.  As such the params are available via STDIN.  The 
subprogram call (which I can't eliminate yet) expects to see the form 
params.  However when I call it from the perl script STDIN is empty.  I have 
tried backticks and the open call (which are supposed to inherit STDIN) to 
no avail.

Any suggestions?

Erich
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.

Share information about yourself, create your own public profile at 
http://profiles.msn.com.


Re: Passing STDIN to subprogram

Posted by Doug MacEachern <do...@covalent.net>.
On Wed, 6 Sep 2000, erich oliphant wrote:

> I am replacing a CGI shell script with a modperl script.  At one point in 
> the shell script subprogram is called.  The HTML form that calls the script 
> calls it via a POST.  As such the params are available via STDIN.  The 
> subprogram call (which I can't eliminate yet) expects to see the form 
> params.  However when I call it from the perl script STDIN is empty.  I have 
> tried backticks and the open call (which are supposed to inherit STDIN) to 
> no avail.

STDIN cannot be passed to a subprocess, because STDIN is not stdin under
mod_perl.  that is, it's not a file descriptor, it's just a Perl glob,
that's tie-d to the Apache request_rec + api.  one solution would be to do
switch the POST to a GET:

local $ENV{PATH} = '/home/dougm/bin';

my $r = shift;

$r->send_http_header;

local $ENV{GATEWAY_INTERFACE} = 'CGI/1.1'; #hmm, shouldn't need todo this

local $ENV{QUERY_STRING} = $r->content;
local $ENV{REQUEST_METHOD} = 'GET';
local $ENV{CONTENT_LENGTH} = 0;

print `cgi-dump`;

where cgi-dump is:
#!/usr/local/bin/perl

use CGI ();

my $q = CGI->new;

print $q->as_string;

works just fine:

% POST http://localhost:8529/perl/post.pl
Please enter content (application/x-www-form-urlencoded) to be POSTed:
one=1
<UL>
<LI><STRONG>one</STRONG>
<UL>
<LI>1<BR>

</UL>
</UL>