use Array::Compare;
my $compare = Array::Compare->new;
my @array1 = (value1, value2, value3...);
my @array2 = (value1, value3, value4...);
if ($compare->compare(\@array1, \@array2)) {
say "Arrays are the same";
} else {
say "Arrays are different";
}
但您也可以使用智能匹配运算符。
if (@array1 ~~ @array2) {
say "Arrays are the same";
} else {
say "Arrays are different";
}
#!/usr/bin/env perl
use strict;
use warnings;
my @array1 = (1..10, 'string');
my @array2 = (1..10, 'string');
my $is_same = is_same(\@array1, \@array2);
print "is_same: $is_same\n";
sub is_same {
my($array1, $array2) = @_;
# immediately return false if the two arrays are not the same length
return 0 if scalar(@$array1) != scalar(@$array2);
# turn off warning about comparing uninitialized (undef) string values
# (limited in scope to just this sub)
no warnings;
for (my $i = 0; $i <= $#$array1; $i++) {
if ($array1->[$i] ne $array2->[$i]) {
return 0;
}
}
return 1;
}
4条答案
按热度按时间muk1a3rh1#
嗯......一个比较数组的模块,你说。Array::Compare怎么样?
但您也可以使用智能匹配运算符。
yqkkidmi2#
您可以比较两个数组的大小(标量上下文中为
@a1 == @a2
),然后将@a1
数组的大小与索引列表的大小进行比较,该索引列表对应于两个数组中相等的字符串(grep $a1[$_] eq $a2[$_], 0..$#a1
)。更注重性能的版本(如无必要,不检查所有元素),
edqdpe6u3#
Perl已经为任何列表操作的解决方案提供了一些部分。
请参阅
List::Util
和List::MoreUtils
。有关此应用程序,请参见**
List::Util::pairfirst
和List::MoreUtils::zip
**vc9ivgsu4#
这个任务很简单,我不一定要使用CPAN模块。相反,我可能会编写自己的比较子例程,并将其放在我自己的实用程序模块中。下面是一个比较两个包含字符串和/或整数的数组的实现。