ошибка объявления хеша perl - PullRequest
0 голосов
/ 28 сентября 2011

Я новичок в Perl и не могу понять, почему этот фрагмент дает мне ошибку 500.

#!/usr/bin/perl
use strict;
use warnings;
use CGI::Carp qw( fatalsToBrowser );

my ($distance, $weight, $total_gas, $mph, $buffer, $pair, @pairs, $value, $form, $name);
our %FORM = ();

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
}

Все, что я пробовал на %FORM = ();, приводит к ошибкам объявления переменных.

Ответы [ 2 ]

9 голосов
/ 28 сентября 2011

Вы уверены, что @pairs содержит ожидаемые вами значения (т. Е. Что они представляют собой пары «имя-значение», разделенные знаком «=»? Скорее всего, $ name не определено, и вы не можете добавить неопределенную пару ключей в хэш Почему вы используете STDIN для чтения значений из строки запроса? Попробуйте:

my $q = CGI->new;
my @keys = $q->param;
my %FORM;
foreach my $name (@keys)
{
    my $value = $q->param($name);
    $FORM{$name} = $value;
}

или

my $q = CGI->new;
my %FORM = $q->Vars;

http://perldoc.perl.org/CGI.html

3 голосов
/ 28 сентября 2011

Я думаю, вам не хватает HTTP-заголовка. Попробуйте добавить следующую строку перед любой печатью:

print "Content-type: text/html\n\n";

Убедитесь, что у вас достаточно прав для запуска скрипта. Это будет зависеть от используемой ОС.

Также вы можете рассмотреть возможность использования модуля CGI, как указано в ответе scrappedcola . Этот код будет работать как для POST, так и для GET:

use strict; use warnings;
use CGI;

my $form = CGI->Vars;
print "Content-type: text/html\n\n";
print "name=".$form->{name};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...