1) array1: 1,2,5,9,11,12,13 2) array2: 1,2,5,11,12,13 3) array3: 1,2,5,7,9,12,13 #### my %union1; my %isect1; # FIND THINGS THAT ARE IN BOTH ARRAY1 AND AND ARRAY2 foreach my $e (@array1) { $union1{$e}=1} foreach my $g (@array2) { if ($union1{$g}) { $isect1{$g}=1} $union1{$g}=1; } my @isect1=keys %isect1; # FIND THINGS THAT ARE IN ALL THREE ARRAYS my %union2; my %isect2; foreach my $e (@isect1) { $union2{$e}=1} foreach my $g (@array3) { if ($union2{$g}) { $isect2{$g}=1} $union2{$g}=1; } # @ISECT2 CONTAINS COMMON VALUES IN ALL THREE ARRAYS my @isect2=keys %isect2;