perl哈希声明错误

时间:2011-09-27 22:02:24

标签: perl hash

我是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 个答案:

答案 0 :(得分:9)

你确定@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

答案 1 :(得分:3)

我认为你缺少HTTP标头。在任何打印之前尝试添加以放置以下行:

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

确保您具有足够的脚本权限才能运行。它取决于你正在使用的操作系统。

你也考虑使用scrappedcola的回答中提到的CGI模块。此代码适用于POST和GET:

use strict; use warnings;
use CGI;

my $form = CGI->Vars;
print "Content-type: text/html\n\n";
print "name=".$form->{name};