my %unique_descriptive = do { local %_; for(@array1, @array2, @array3){ $_{$_}->{count}++ ; push @{$_{$_}->{values}},$_; } %_; }; dump_ref(\%unique_descriptive, '%unique_descriptive'); __OUTPUT__ %unique_descriptive = { '1' => { 'count' => 1, 'values' => [1] }, '2' => { 'count' => 1, 'values' => [2] }, ...clipped for brevity... '11' => { 'count' => 2, 'values' => [11,11] }, '12' => { 'count' => 2, 'values' => [12,12] }, ...clipped for brevity... '19' => { 'count' => 3, 'values' => [19,19,19] }, '20' => { 'count' => 3, 'values' => [20,20,20] }, '21' => { 'count' => 2, 'values' => [21,21] }, ...clipped for brevity... '40' => { 'count' => 1, 'values' => [40] } }