Perl数组元素比较

0 arrays perl

我是Perl编程的新手.我试图比较每个元素的两个数组.所以这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10.1;

my @x = ("tom","john","michell");
my @y = ("tom","john","michell","robert","ricky");
if (@x ~~ @y)
{
    say "elements matched"; 
}
else 
{ 
    say "no elements matched";
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到了输出 no elements matched

所以我想要深入比较两个数组元素并且元素不匹配,我想将它们存储在一个新数组中.因为我现在可以比较唯一匹配的元素,但我无法将其存储在新数组中.

如何将这些不匹配的元素存储在新数组中?

请有人可以帮助我和建议.

fug*_*ugu 5

我会避免使用Perl中的智能匹配 - 例如,请参阅此处

如果您正在尝试比较$y[0]with 的内容,$x[0]那么这是一种方法,它将所有不匹配放在一个新数组中@keep:

use strict;
use warnings;
use feature qw/say/;

my @x = qw(tom john michell);
my @y = qw(tom john michell robert ricky);

my @keep;
for (my $i = 0; $i <$#y; $i++) {
    unless ($y[$i] eq $x[$i]){
        push @keep, $y[$i];
    }
}

say for @keep;
Run Code Online (Sandbox Code Playgroud)

或者,如果您只是想查看另一个数组中是否存在一个名称(并且对直接比较元素不感兴趣),请使用两个哈希:

my (%x, %y);

$x{$_}++ for @x;
$y{$_}++ for @y;

foreach (keys %y){
    say if not exists $x{$_};
}
Run Code Online (Sandbox Code Playgroud)