Вопрос по передаче данных здесь уже много раз обсуждался.
Я обычно, в таких случаях как у тебя, пользуюсь следующим кодом:

Код:
%param = &comming();
sub comming {
my $dl = $ENV{CONTENT_LENGTH};
my $query = $ENV{QUERY_STRING};
if ($dl >0) {
sysread(STDIN, $que, $dl);
if ($query) {
$query = $query.'&'.$que;
}
else {
$query = $que;
}
}
my @comm = split('&', $query);
my %query = ();
foreach (@comm) {
/([^=]+)=(.*)/ && do {
local ($field, $value) = ($1, $2);
$query{$field} = &decode($value);
}
}
return %query;
}
sub decode {
my($val)=@_;
$val=~s/\+/ /g;
$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;
return $val;
}
После чего получаем хэш
%param ...
А дальше совсем просто:

Код:
foreach $key (keys %param) {
$value = $param{$key};
print "$key => $value";
}
Работает как через GET так и через Post или при одновременной передаче данных через GET и POST.
Ещё ни разу не подводил...
