Поиск определенного модуля для сравнения массивов - PullRequest
2 голосов
/ 17 декабря 2011

Есть ли модуль, который может делать это более красиво (не только заменяя умную часть)?

#!/usr/bin/env perl
use warnings;
use 5.014;

my @array_all = ( qw( one two three four ) );
my @array_part = ( qw( two four six ) );

my @temp;
for my $i ( @array_part ) {
    push @temp, $i if not $i ~~ @array_all;
}

# if ( @temp ) { do something );

Ответы [ 2 ]

3 голосов
/ 17 декабря 2011

Вы ищете набор разностей или, возможно, относительное дополнение , пример неоднозначный. Подойдет любой из многочисленных наборов модулей .

use Set::Object qw();
Set::Object
    ->new(qw(two four six))
    ->difference(Set::Object->new(qw(one two three four)))
    ->members;    # ('six')
2 голосов
/ 17 декабря 2011

Вы можете использовать Список :: Сравнить

#!/usr/bin/env perl
use strict;
use warnings;
use List::Compare;
my @array_all  = ( qw( one two three four ) );
my @array_part = ( qw( two four six ) );
my @temp;
my $lc = List::Compare->new('--unsorted',\@array_all,\@array_part);
@temp  = $lc->get_complement;
print "@temp\n";
...