views:

224

answers:

3

I'm trying to read out the POST-Data that was sent from a form in a page to my Perl Script. I googled and found out that:

read(STDIN, $param_string, $ENV{'CONTENT_LENGTH'})

reads out the whole Data-String with and writes the whole string to $param_string in the form of

Param1=Value1&Param2=Value2&Param3=Value3

by spliting it at the right places I get the necessary Data.

But I wonder why my $param_string is empty.

When I try the whole thing with GET:

$param_string = $ENV{'QUERY_STRING'};

everything works fine. Does anybody have an idea?

+11  A: 

There absolutely no real reason for someone at your level to want to hand parse CGI requests.

Please use CGI::Simple or CGI.pm.

CGI.pm has a lot of baggage (HTML generation, function oriented interface) which makes CGI::Simple preferable.

Using any CGI processing module on CPAN is better than trying to write CGI processing code from scratch.

See parse_query_string in CGI::Simple for a way of accessing parameters passed using the query string when processing a form that is POSTed to your script.

If you want to learn how to do it right, you can read the source code of either module. Reading through the CGI.pm CHANGES file is also instructive.

Sinan Ünür
A "Hello, world!" from scratch might do some good, though.
innaM
@Manni, not really. At this point, writing CGI parsing by hand is about like writing multiplication as repeatedly adding. It's just not anything any modern programmer should deal with, unless they want to specialize in low-level stuff.
Randal Schwartz
putchar('H') or die('Error writing H');putchar('e') or ...
ysth
A: 

Found antoher, more simple way to handle this for my needs.

foreach my $key ( param() ) {
  my $value = param_mp($key);
  print $key." | ".$value;
 }

Thank you.

Przemek
And how are param() and param_mp() defined?
innaM
i googled and found out that param() gives back all the keys and param_mp gives me the values. we have an own parser and it uses the param and param_mp subroutines from CGI
Przemek
`param_mp` isn't documented anywhere near CGI.pm.
innaM
@Manni: Indeed: http://www.google.com/search?q=param_mp+cgi
Sinan Ünür
A: 

Under mod_perl 2, Apache2::Request works for me.

ysth