我是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 = ();
上尝试的所有内容都给出了变量声明错误。
答案 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;
答案 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};