my $in = [ one => 1, two => 2, two => '2.003' ]; my $out = {}; for(my $i=0; $i<$#$in; $i+=2) { push @{$out->{$in->[$i]}}, $in->[$i+1]; } #### my $i=0; push(@{$out->{$in->[$i++]}},$in->[$i++]) while $i<$#$in;