#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $sur = [ { 'one' => 'USA', 'two' => 'GOD', 'three' => '690557','four'=>'hello how are u',}, { 'one' => 'USA', 'two' => 'GOD', 'three' => '690557','four'=>'I am fine',}, { 'one' => 'UK', 'two' => 'GOD', 'three' => '690558','four'=>'I am Okay',}, ]; my %h; foreach ( @$sur ){ if( exists $h{ $_->{three} } ){ $h{ $_->{three} } .= "####" . $_->{four}; }else{ $h{ $_->{three} } = join "<-->", @{$_}{ qw/one two four/ }; } } print Dumper \%h;