my %count; $count{$_}++ for @temp; my @non_unique_intersection = grep { $count{$_}-->0 } @temp2; my (@leftovers, @leftovers2); push @{$count{$_}>0 ? \@leftovers : \@leftovers2}, ($_) x abs($count{$_}) for keys %count;