Perl Home Search CGI

1.3 Manually Parsing CGI key pairs


14.02.2006

1.2.2 cookie_jar / Keep Cookies with LWP [  up  ] - [ top ] 1.4 CGI to mod_perl

Inline Code

Portable and RFC-compliant Inline Code for CGI key pair processing
my $q = &ParseForm();

print "CGI var 'foo' is ", $q->{'foo'};

sub ParseForm {
 my ($pair, $name, $value, @missing_fields, @bad_emails, @pairs, $buffer);
 
 my %INPUT = ();
 
 if ($ENV{'REQUEST_METHOD'} eq 'GET') {
  @pairs = split(/&/, $ENV{'QUERY_STRING'});
 }
 
 elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
  read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  @pairs = split(/&/, $buffer);
 }
 
 foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
 
  $name =~ tr/+/ /;
  $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s/\r//g;
 
  $INPUT{$name} = $value;
 }
 
 if ( $INPUT{'debug'} ) {
  foreach $name (keys %INPUT) {
   print "$name is «$INPUT{$name}»";
  }
 }
 
 \%INPUT;
}

copyright by reto - created with mytexi