<?xml version="1.0" encoding="windows-1252"?>
<node id="988902" title="Re: Duplicate Element in an Array" created="2012-08-21 19:56:10" updated="2012-08-21 19:56:10">
<type id="11">
note</type>
<author id="401112">
johngg</author>
<data>
<field name="doctext">
&lt;p&gt;It is not clear how you arrive at your expected output. Your group one is clear enough but I can't see the logic of how you arrive at your groups two, three and four. Perhaps you could explain further how you are separating the items. Here is a possible solution that builds an AoA by forming arrays of unique and duplicate items then recursively acting on the duplicates until none are left. It does not arrive at the same group members you show. The code.&lt;/p&gt;
&lt;code&gt;
use strict;
use warnings;

use Data::Dumper;

my @input = qw{
   1200 1300 1200 1000 1100 1200
   1500 1700 2000 2100 3000 2100
   1200 1500 1700 1700
   };

my @groups = deDup( \ @input );

print Data::Dumper-&gt;Dumpxs( [ \ @groups ], [ qw{ *groups } ] );

sub deDup
{
    my $raToCheck = shift;

    my $raUniq = [];
    my $raDups = [];
    my %seen;

    push @{ $seen{ $_ } ++ ? $raDups : $raUniq }, $_ for @$raToCheck;

    return $raUniq, @$raDups ? deDup( $raDups ) : ();
}
&lt;/code&gt;
&lt;p&gt;The output.&lt;/p&gt;
&lt;code&gt;
@groups = (
            [
              '1200',
              '1300',
              '1000',
              '1100',
              '1500',
              '1700',
              '2000',
              '2100',
              '3000'
            ],
            [
              '1200',
              '2100',
              '1500',
              '1700'
            ],
            [
              '1200',
              '1700'
            ],
            [
              '1200'
            ]
          );
&lt;/code&gt;
&lt;p&gt;I hope this is helpful.&lt;/p&gt;
&lt;!-- Node text goes above. Div tags should contain sig only --&gt;
&lt;div class="pmsig"&gt;&lt;div class="pmsig-401112"&gt;
&lt;p&gt;Cheers,&lt;/p&gt;&lt;p&gt;JohnGG&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</field>
<field name="root_node">
988859</field>
<field name="parent_node">
988859</field>
</data>
</node>
