我似乎无法从Perl中的引用拼接数组

时间:2019-03-04 06:45:57

标签: arrays perl

因此,我将数组引用传递给函数以清除某些数组元素:

代码如下:

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行的字符串(。)或字符串。

完全不确定这里发生了什么。我可以理解我的接合线不是正确的语法。但是为什么它不影响上面的线呢?

任何见识都会受到赞赏。

1 个答案:

答案 0 :(得分:4)

首先

splice(@{$notes}), $x, 1;

应该是

splice(@{$notes}, $x, 1);

这不是您询问的错误,但这是您显示的唯一错误。


导致您获得错误消息的错误很可能是错误的循环。我相信您正在使用类似

的方法
for (@$notes)

for (0..$#$notes)

第一个是越野车,因为不允许您在要迭代的数组中添加或删除元素。

第二个是错误的,因为它将执行循环主体的次数与数组最初具有元素的次数相同,因此您最终将循环太多。