逐个字符比较两个数组 perl



我有两个数组:

包含A,B,C,D,E 的@Array1

包含L,B,C,F,E的@Array2

我尝试使用 foreach 来遍历数组中的每个元素,并说它是否是真的开始,但在做任何事情时我都会遇到肮脏的大胖错误。

该程序可以完美地与一个foreach一起使用,但是对于一个嵌套的foreach,它会出错:

foreach my $var (@Array1){
       print "Letter $var";
        foreach my $var2 (@Array2){
        if($var2 eq $var) {
            print "They are equal";
        } else {
            next;
        }
    }
}

任何想法;一个错误是:

在第 192 行<>第 2 行 compare.pl 字符串 eq 中使用未初始化的值。

我已经运行了它:

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

您的错误意味着任一数组中的一个值未定义。由于您没有显示数组如何分配值,因此无法说明原因。很明显,问题出在您未显示的代码中。

调试问题可以做的是使用 Data::Dumper 模块打印数组:

use Data::Dumper;
print Dumper @Array1, @Array2;

然后,您应该看到它们包含哪些值。

也:

  • 使用else { next }块是完全没有必要的,因为它是循环的最后一部分。
  • 打印"它们是相等的"对于较大的数组来说将是一个相当无用的陈述,因为你会得到输出,指出某物等于其他东西,但你只知道其中一个元素。
您可能

还想使用 array_diff(@arr1, @arr2)数组::实用工具。

正如TLP所说,数组中的一个值是undef。您可以将代码更改为类似的东西来解决问题。

   Foreach My $var (@Array1){           打印"信$var";            foreach my $var 2 (@Array2){            #(两者都是 undef (所以它们匹配)) OR (两者都被定义和匹配)            if((!defined($var 2) && !defined($var)) ||                 (定义($var 2) && 定义($var) &&($var 2 eq $var))){                打印"它们是平等的";            } else {                下一个;            }        }    }

相关内容

  • 没有找到相关文章

最新更新