本文整理自 perlfaq4

Q:如何计算两个数组的差异、交集以及并集?

A:使用 Hash。

my (@union, @intersection, @difference);
my %count = ();
foreach my $element (@array1, @array2) {
    $count{$element}++;
}
foreach my $element (keys %count) {
    push @union, $element;
    push @{$count{$element} > 1 ? \@intersection : \@difference }, $element;
}

最终得到 @union 为两个数组的并集, @intersection 为两个数组的交集, @difference 为所有只在一个数组中出现的元素。

PS:这个方法要求每个数组内部元素不相同!