我有两个数组:
@ 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行<>中使用字符串eq中未初始化的值第2行。
答案 0 :(得分:2)
我已经运行了它:
use strict;
use warnings;
my @Array1=qw/A B C D E/;
my @Array2=qw/L B C F E/;
foreach my $var (@Array1){
$\=$/;
print "Letter $var";
foreach my $var2 (@Array2){
if($var2 eq $var) {
print "They are equal";
} else {
next;
}
}
}
我已经知道了
Letter A
Letter B
They are equal
Letter C
They are equal
Letter D
Letter E
They are equal
答案 1 :(得分:1)
您的错误表示任一数组中的某个值未定义。由于您没有显示如何为数组分配值,因此无法确定原因。很明显,问题在于你没有展示的代码。
调试问题的方法是使用Data::Dumper
模块打印数组:
use Data::Dumper;
print Dumper \@Array1, \@Array2;
然后您应该看到它们包含的值。
此外:
else { next }
块是非常必要的,因为它是循环的最后一部分。答案 2 :(得分:1)
您可能还想使用array_diff(@ arr1,@ arr2) Array::Utils。
答案 3 :(得分:0)
正如TLP所说,数组中的一个值是undef。 您可以将代码更改为类似的内容以解决问题。
foreach my $var (@Array1){ print "Letter $var \n"; foreach my $var2 (@Array2){ #(Both are undef (so they match)) OR (both are defined AND MATCH) if((!defined($var2) && !defined($var)) || (defined($var2) && defined( $var) && ($var2 eq $var))) { print "They are equal\n"; } else { next; } } }