我有两个数组:
@ Array1包含A,B,C,D,E
和
@ Array2,包含L,B,C,F,E
我尝试使用foreach遍历数组中的每个元素,并说是否真的开始,但是在做任何事情时我都会遇到肮脏的重大错误 .
该程序与一个foreach完美配合,但是嵌套的它会出错:
foreach my $var (@Array1){
print "Letter $var";
foreach my $var2 (@Array2){
if($var2 eq $var) {
print "They are equal";
} else {
next;
}
}
}
有任何想法吗;一个错误是:
在compare.pl第192行,<>第2行的字符串eq中使用未初始化的值 .
4 回答
我跑了:
而且我知道了
正如TLP所说,数组中的一个值是undef . 您可以将代码更改为类似的内容以解决问题 .
您的错误意味着任何一个数组中的值之一是未定义的 . 由于您没有显示如何为数组赋值,因此无法确定原因 . 很明显,问题出在你没有展示的代码中 .
调试问题的方法是使用Data::Dumper模块打印数组:
然后你应该看到它们包含的值 .
也:
使用
else { next }
块是非常必要的,因为它是循环的最后一部分 .打印"They are equal"对于更大的数组来说是一个非常无用的语句,因为你会得到输出,表明某些东西等于其他东西,但你只会知道其中一个元素 .
您可能还想使用Array::Utils的array_diff(@ arr1,@ arr2) .