【问题标题】:Comparing two arrays character by character perlperl逐字符比较两个数组
【发布时间】:2012-11-07 20:42:40
【问题描述】:

我有两个数组:

@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 中的未初始化值。

【问题讨论】:

  • 忘掉我们的吧!我复制的错误我会编辑。数组是早些时候在程序中制作的......
  • 您所做的编辑非常奇怪...对不起,删除标签或更改代码以使其无法编译是没有意义的。

标签: arrays string perl compare character


【解决方案1】:

我已经运行过了:

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

【讨论】:

    【解决方案2】:

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

    调试问题的方法是使用Data::Dumper 模块打印数组:

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

    然后你应该看到它们包含什么值。

    还有:

    • 完全没有必要使用 else { next } 块,因为它是循环的最后一部分。
    • 打印“它们相等”对于更大的数组来说是一个相当无用的语句,因为您会得到表明某事物等于其他事物的输出,但您只会知道其中一个元素。

    【讨论】:

    • 它主要用于调试目的,只是为了显示它是否正常工作。我很清楚让它看看哪个是平等的。无论如何,这有帮助,非常感谢。
    【解决方案3】:

    您可能还想使用 array_diff(@arr1, @arr2) Array::Utils.

    【讨论】:

      【解决方案4】:

      正如 TLP 所说,数组中的一个值是 undef。 你可以把代码改成这样来解决问题。

      foreach 我的 $var (@Array1){ print "字母 $var \n"; foreach 我的 $var2 (@Array2){ #(两者都是 undef(因此它们匹配))或(两者都已定义 AND MATCH) if((!defined($var2) && !defined($var)) || (定义($var2) && 定义($var) && ($var2 eq $var))) { print "他们相等\n"; } 别的 { 下一个; } } }

      【讨论】:

        猜你喜欢
        • 2015-06-17
        • 2019-01-14
        • 1970-01-01
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 2014-05-31
        • 2019-08-13
        相关资源
        最近更新 更多