use strict; use warnings; my $result = data(); foreach my $key ( keys %$result ) { my $value = join(',', @{$result->{$key}}); print "User Name = $key - City: $value\n"; } sub data { #db code stuff my $sql = [ { username => 'abc', city=> 'foo' }, { username => 'def', city=> 'bar' }, { username => 'ghi', city=> 'goo' }, { username => 'jkl', city=> 'car' }, { username => 'm-n-o', city=> 'car' }, ]; #... my %no_name_found; if ( @$sql ) { for ( @$sql ) { my $user_name = $_->{'username'}; my $city = $_->{'city'} || ''; if ( check_name( $user_name ) ) { push @{ $no_name_found{ $user_name } }, $city; } } } return \%no_name_found; } sub check_name { my $name = shift; if ( $name =~ /^\w+$/ ) { return $name; } } Output User Name = def - City: bar,bas User Name = abc - City: foo User Name = jkl - City: car User Name = ghi - City: goo