Of course, ++merlyns post shows what an elegant solution is... So that's the cute idiom you where asking for!
Assuming you /can|want/ not process the duplicates right away, you could save memory by omitting the extra array @out. When you go over the array for the fist time, do the counting, then do the processing separately:
my @in = qw(test foo test bar baz foo test);
my %keycount;
foreach (@in)
{
$keycount{$_}++;
# do whatever else you need to do
}
foreach (keys %keycount)
{
#print $_ if $keycount > 1;
print if $keycount{$_} > 1; # Thx, ++Aristotle!
# or do something else with $_
}
So long,
Flexx