http://qs321.pair.com?node_id=205254


in reply to Get All Duplicated Elements in an Array (Once, without shifting)

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

Replies are listed 'Best First'.
Re^2: Get All Duplicated Elements in an Array (Once, without shifting)
by Aristotle (Chancellor) on Oct 15, 2002 at 08:32 UTC
    That is, of course, print if $keycount{$_} > 1;

    Makeshifts last the longest.

      Yikes!!! Caught me with my pants way down... (you caught me back, I guess ;)

      But, it works if there are no duplicates! Umm... 8)

      Cheers,
      Flexx

      Update: struck a potentially offensive joke, that wasn't meant to be such.