Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在列表中使用未初始化的值_Arrays_Perl_Initialization - Fatal编程技术网

Arrays 在列表中使用未初始化的值

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(

我从URL加载了一些变量,并想在CGI脚本中检查它们是否已初始化。我很快发现我不能在Perl中将未初始化的值放入列表

我的方法只是迭代列表并使用开关变量
$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;