Te paso dos subrutinas, en una se interpreta si el formulario se ha enviado con el method "get" o el "post", la segunda interpreta el resultado de la primera devolviendo un hash de la forma: clave -> valor. Las llamadas a las subrutinas son:
$incoming = &cgi_receive(STDIN, $ENV{'CONTENT_LENGTH'});
%FORM = &cgi_decode($incoming);
y las subrutinas:
sub cgi_receive { #header.pl
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read($_[0], $incoming, $_[1]);
}
else {
$incoming = $ENV{'QUERY_STRING'};
}
$incoming = &replaceSustitucionesAcentos($incoming);
return $incoming;
}
#-------------------------------------------- cgi_decode
sub cgi_decode { #header.pl
@pairs = split(/&/, $_[0]);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$name =~ tr/+/ /;
$value =~ tr/+/ /;
$name =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/gie;
$value =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/gie;
#### reemplazamos caracteres especiales
#$value =~ s/;/$$/g; #marcamos posición de los ;
$value =~ s/&(\S{1,6})$$/&\1;/g; #buscamos c. especiales
$value =~ s/$$/ /g; #borramos los ; sobrantes
$value =~ s/\|/ /g;
$value =~ s/^!/ /g;
#### saltamos los campos con valor nulo.
next if ($value eq "");
#### Check for "assign-dynamic" field names
#### Mainly for on-the-fly input names, especially checkboxes
if ($name =~ /^assign-dynamic/) {
$name = $value;
$value = "on";
}
#### Allow for multiple values of a single name
$FORM{$name} .= ", " if ($FORM{$name});
$FORM{$name} .= $value;
}
return %FORM;
}
Si tienes algún problema en visializarlas o entenderlas emíliame a:
[email protected]