我是编程新手,因此我陷入了一个基本问题.
以下是我为了比较而编写的代码.但是我得到的结果对我来说没有意义.如果有人能告诉我出了什么问题,我将不胜感激.
有两个数组:@array1,@array2不等长.
我想比较两个并列出@ array1中不存在的值.
my %temp = map {$_,$_}@array2;
for (@array1){
next if exists $temp{$_};
open (FILE, ">>/filename") or die "$!";
print FILE "$_\n";
close(FILE);
}
Run Code Online (Sandbox Code Playgroud)
Sin*_*nür 10
请参阅常见问题解答如何计算两个阵列的差异?如何计算两个数组的交集?
调整您发布的代码:
#!/usr/bin/perl
use strict; use warnings;
my @x = 1 .. 10;
my @y = grep { $_ % 2 } @x;
my %lookup = map { $_ => undef } @y;
for my $x ( @x ) {
next if exists $lookup{$x};
print "$x\n";
}
Run Code Online (Sandbox Code Playgroud)
如果你正在为测试做这个,我认为你是我会强烈建议在更新版本的测试中使用is_deeply ::更多
您将不得不更新Test :: More
cpanp install Test::More
Run Code Online (Sandbox Code Playgroud)
或者如果你使用的是perl 5.5
cpan Test::More
Run Code Online (Sandbox Code Playgroud)
然后你就可以使用它了
use Test::More;
tests => 1
is_deeply ( \@arr1, \@arr2, 'test failed' );
Run Code Online (Sandbox Code Playgroud)
如果你没有这样做进行测试,但你是为了内省的目的这样做并且阵列很小,我建议使用XXX:
cpanp install http://search.cpan.org/CPAN/authors/id/I/IN/INGY/XXX-0.12.tar.gz
Run Code Online (Sandbox Code Playgroud)
然后你就可以使用它了
use XXX;
YYY [ \@arr1, \@arr2 ];
Run Code Online (Sandbox Code Playgroud)