Arrays 在列表中使用未初始化的值
我从URL加载了一些变量,并想在CGI脚本中检查它们是否已初始化。我很快发现我不能在Perl中将未初始化的值放入列表 我的方法只是迭代列表并使用开关变量Arrays 在列表中使用未初始化的值,arrays,perl,initialization,Arrays,Perl,Initialization,我从URL加载了一些变量,并想在CGI脚本中检查它们是否已初始化。我很快发现我不能在Perl中将未初始化的值放入列表 我的方法只是迭代列表并使用开关变量$sucessDOM(如果所有数据都已初始化,则为1,其他地方为0) 我想到了这个: ### Read data from HTML my $mailinglist = param( 'mailinglist' ); my $firstname = param( 'firstname' ); my $lastname = param(
$sucessDOM
(如果所有数据都已初始化,则为1,其他地方为0)
我想到了这个:
### Read data from HTML
my $mailinglist = param( 'mailinglist' );
my $firstname = param( 'firstname' );
my $lastname = param( 'lastname' );
my $mail = param( 'mail' );
my $sucessDOM = 0;
my @DOM = { $mailinglist, $firstname, $lastname, $mail };
### Data validation
for my $data ( @DOM ) {
if ( $data eq undef ) {
$sucessDOM = $sucessDOM + 1;
}
if ( $sucessDOM = @DOM ) {
print "@DOM\n";
$sucessDOM = 1;
}
else {
$sucessDOM = 0;
}
}
结果如下
[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value $mailinglist in anonymous hash ({}) at ./read_form.cgi line 20.
[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value $lastname in anonymous hash ({}) at ./read_form.cgi line 20.
[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value in string eq at ./read_form.cgi line 24.
HASH(0x55c8a73eeea8)
我也无法理解,如果数组中只有两个值都未初始化,为什么会出现错误,因为我直接运行脚本而不传递任何值。您的代码至少有四个问题: 首先,{}生成一个匿名哈希并返回对它的引用;这是一个以@DOM结尾的值。这些警告是因为哈希键必须是字符串,如果它们未定义,则发出警告。你应该是这样的
my @DOM = ( $mailinglist, $firstname, $lastname, $mail );
其次,eq
比较字符串,因此它将unde
转换为'
。要测试$data是否未定义,请执行以下操作
if (! defined $data) {
第三,您要检查for循环中的所有数组元素是否都成功(除了循环的最后一次迭代之外,在任何循环中都不会成功)。将if($successDOM…
块移动到for循环之后
第四,=
只是一个赋值运算符;使用=
进行数值比较:
if ($successDOM == @DOM) {
my$successDOM=!grep{!defined($)}$mailinglist、$firstname、$lastname、$mail;