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

Dan*_*lan 0 arrays perl

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

代码如下:

if($notes->[$x] !~ /[^CF]/)
{
    print "$notes->[$x]\n";
    splice (@{$notes}), $x, 1;          
}
Run Code Online (Sandbox Code Playgroud)

如果注释掉拼接线,则循环可以很好地显示数组的每个$ x元素。但是,如果我不注释掉拼接注释,那么一切都会失败。它不会打印出$ x元素,也不会执行splice命令。

在/var/www/cgi-bin/Funx.pm第130行的模式匹配(m //)中使用未初始化的值。

在/var/www/cgi-bin/Funx.pm第132行的串联(。)或字符串中使用未初始化的值。

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

任何见识将不胜感激。

ike*_*ami 5

首先

splice(@{$notes}), $x, 1;
Run Code Online (Sandbox Code Playgroud)

应该

splice(@{$notes}, $x, 1);
Run Code Online (Sandbox Code Playgroud)

那不是您问的错误,而是您显示的唯一错误。


导致您确实获得错误消息的错误可能是不正确的循环。我相信您正在使用一些类似的方法

for (@$notes)
Run Code Online (Sandbox Code Playgroud)

要么

for (0..$#$notes)
Run Code Online (Sandbox Code Playgroud)

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

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