# cgi.pl - decode CGI input. # # Usage: # require 'cgi.pl'; # &cgi'decode; # ... # $name = $cgi'tags{'name'}; package cgi; sub header {print "Content-type: text/html\n\n";} sub decode { local($args, $n_read, *terms, $tag, $value); $ENV{'REQUEST_METHOD'} eq "POST" ? ($n_read = sysread(STDIN, $args, $ENV{'CONTENT_LENGTH'})): ($args = $ENV{'QUERY_STRING'}); @terms = split('&', $args); foreach (@terms) { ($tag, $value) = split(/=/, $_, 2); $value =~ s/\+/ /g; $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/ge; $tags{$tag} = $value; # tags is global } } sub pack { local($value) = @_; $value =~ s/(\W)/sprintf("%%%.2X", ord($1))/ge; $value =~ s/%20/+/g; return $value; } 1;