Disculpa, pero me quedó dando vueltas tu problema y creo saber a que te refieres...la entrada de datos la haces ahí ?
Código:
sub input_data {
my (@pairs,$buffer,%input_data);
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);
}else {
&error('leer','datos');
}
foreach my $pair (@pairs) {
my ($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ tr/\0//d;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/\0//d;
$input_data{$name} = $value;
}
return(%input_data);
}
Cuando haces eso el $value =~ tr/+/ /; te reemplaza todos los + por un espacio y los
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/\0//d;
te elimina todo el resto y te lo deja perfecto para usar como un texto común...
Espero que sea esto
Saludos