my %count; $count{$_}++ for @temp;
my @non_unique_intersection = grep { $count{$_}-->0 } @temp2;
####
# my @non_unique_intersection = nonunique_intersect( \@temp, \@temp2 );
sub nonunique_intersect {
my ($x, $y) = @_;
my %count; $count{$_}++ for @$x;
my @return = grep { $count{$_}-->0 } @$y;
return wantarray ? @return : \@return;
}
####
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;