Parse form data using Perl
Parsing form data is easy using Perl. The subroutine below will parse the data and place the variables in a %FORM hash.
sub parse {
if ( $ENV{'CONTENT_TYPE'} =~ m|^multipart/form-data|i ) {
my $q = new CGI;
%FORM = $q->Vars;
} else {
my ($vars,@VARS);
if ( $ENV{'REQUEST_METHOD'} eq "GET" ) {
$vars = $ENV{'QUERY_STRING'};
} elsif ( $ENV{'REQUEST_METHOD'} eq "POST" ) {
read(STDIN,$vars,$ENV{'CONTENT_LENGTH'});
}
@VARS = split(/[&;]/,$vars);
foreach $i ( 0 .. $#VARS ) {
$VARS[$i] =~ s/+/ /g;
my ($key, $val) = split(/=/,$VARS[$i],2);
$key =~ s/%(..)/pack("c",hex($1))/ge;
$val =~ s/%(..)/pack("c",hex($1))/ge;
$FORM{$key} .= " " if ( defined($FORM{$key}) );
$FORM{$key} .= $val;
}
}
}
To parse input call the subroutine at the beginning of your script:
parse();
To get variable values:
The value of name is $FORM{'name'}
posted March 10, 2010 in Perl
