my %seen; $seen{$_}=1 for @list1; my @intersection = grep ++$seen{$_}==2, @list2;