#-------------- start of &getcgivars() module, copied in -------------

# Read all CGI vars into an associative array.
# If multiple input fields have the same name, they are concatenated into
# one array element and delimited with the \0 character.
# Currently only supports Content-Type of application/x-www-form-urlencoded.
    sub getcgivars {
    local($in, %in) ;
    local($name, $value) ;


# First, read entire string of CGI vars into $in
    if ($ENV{'REQUEST_METHOD'} eq 'GET') {
    $in= $ENV{'QUERY_STRING'} ;

    } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
    if ($ENV{'CONTENT_TYPE'}=~ m#^application/x-www-form-urlencoded$#i) {
    $ENV{'CONTENT_LENGTH'}
    || &HTMLdie("No Content-Length sent with the POST request.") ;
    read(STDIN, $in, $ENV{'CONTENT_LENGTH'}) ;

    } else {
    &HTMLdie("Unsupported Content-Type: $ENV{'CONTENT_TYPE'}") ;
    }

} else {
    &HTMLdie("Script was called with unsupported REQUEST_METHOD.") ;
}

# Resolve and unencode name/value pairs into %in
    foreach (split('&', $in)) {
    s/\+/ /g ;
    ($name, $value)= split('=', $_, 2) ;
    $name=~ s/%(..)/sprintf("%c",hex($1))/ge ;
    $value=~ s/%(..)/sprintf("%c",hex($1))/ge ;
    $in{$name}.= "\0" if defined($in{$name}) ; # concatenate multiple vars
    $in{$name}.= $value ;
}
return %in ;
}

#-------------- end of &getcgivars() module --------------------------


 Return to Previous Page