因此,我将数组引用传递给函数以清除某些数组元素:
代码如下:
if($notes->[$x] !~ /[^CF]/)
{
print "$notes->[$x]\n";
splice (@{$notes}), $x, 1;
}
如果我注释掉拼接线,则循环可以很好地显示数组的每个$ x元素。但是,如果我不注释掉拼接注释,那么一切都会失败。它不会打印出$ x元素,也不会执行splice命令。
在模式匹配(m //)中使用未初始化的值 /var/www/cgi-bin/Funx.pm第130行。
使用未初始化的值 /var/www/cgi-bin/Funx.pm第132行的字符串(。)或字符串。
完全不确定这里发生了什么。我可以理解我的接合线不是正确的语法。但是为什么它不影响上面的线呢?
任何见识都会受到赞赏。
答案 0 :(得分:4)
首先
splice(@{$notes}), $x, 1;
应该是
splice(@{$notes}, $x, 1);
这不是您询问的错误,但这是您显示的唯一错误。
导致您获得错误消息的错误很可能是错误的循环。我相信您正在使用类似
的方法for (@$notes)
或
for (0..$#$notes)
第一个是越野车,因为不允许您在要迭代的数组中添加或删除元素。
第二个是错误的,因为它将执行循环主体的次数与数组最初具有元素的次数相同,因此您最终将循环太多。