my @loop_addr = (); foreach my $row (@{$all_party_id_data}) { my %row_data; $row_data{FULL_NAME} = $row->{FULL_NAME} || ''; $row_data{ADDR} = $row->{ADDR} || ''; $row_data{ZIP} = $row->{ZIP} || ''; warn Dumper $row_data{FULL_NAME}; # it will get "Mary Lou" # I just want @loop_names to have what is unique @loop_names = map /$row_data{FULL_NAME}/ ? () : $_, @loop_names; $row_data{N_DATA} = \@loop_names; push(@loop_addr, \%row_data); } # Dumper of @loop_addr =code $VAR1 = { 'FULL_NAME' => 'Mary Lou', 'ADDR' => '100 - Main Street', 'ZIP' => '12345', 'EMAIL_DATA' => [ { 'NAMES' => 'John Doe' }, { 'NAMES' => 'Mary Lou' # this shouldn't be here } ], }; =cut