my @sets = (\@array1, \@array2, \@array3, \@array4 ); for my $h (0..$#sets) { for my $j ($h+1..$#sets) { compute_stuff($sets[$h], $sets[$j]); } } Sub union_intersection { my ($set1, $set2) = @_; my (%union, %intersect); foreach my $e (@$set1, @$set2) { $union{$e}++ && $intersect{$e}++ } my @intersect = sort keys %intersect; #print FILEOUT "@intersect\n"; print FILEOUT scalar @intersect; print FILEOUT "\n"; }