我试图执行一个Perl CGI脚本明确包的名字,但我得到一个错误:全局符号“%formsequence”需要在37行
Global symbol "%formsequence" requires explicit package name at line 37.
我做了一些研究,发现use strict
力量我在我使用它们或存储任何数据之前声明变量,但在我的程序中我已经声明了它们,这就是为什么我不明白这个错误。这是我的脚本:
#!/usr/bin/perl -w
use strict;
my %errors;
my %form;
my @formsequence;
my %fields = (
"lname" => "Last Name",
"phone" => "Phone",
"fname" => "Fist Name"
);
my %patterns = (
"lname" => '[A-Z][a-z]{2,50}',
"phone" => '\d{3}-\d{3}-\d{4}',
"fname" => '[A-Z][A-Za-z]{2,60}'
);
@formsequence = ("lname", "phone", "phone");
print "content-type/html\n\n";
if ($ENV{REQUEST_METHOD} eq "POST") {
&readformdata;
if (&checkrequiredfields) {
print "Form Data validated successfully!";
}
else {
foreach (keys (%fields)) {
if ($fields{$_} != $formsequence{$_}) { <-- line 37
$errors{$_}="Not in correct sequence\n";
}
}
}
您声明了一个数组,但稍后尝试访问它,就像它是一个散列一样。 – dsm
@dsm我想遍历数组,所以我必须做'$ formsequence {$ _}'。 –
@JohnAmbers你不能做'$ formsequence {$ _}',因为你没有一个名为'%formsequence'的散列。你只有一个名为'@ formsequence'的数组(你可以用'$ formsequence [$ integer]''来访问这个数组。 –