sub names{ ... my @loop_data = (); # initialize an array while ( my $row = $data_handle->fetchrow_hashref ){ my %row_data; # get a fresh hash for the row data # fill in this row $row_data{names} = $row->{'names'} || ''; # push a reference to this row into the loop! push(@loop_data, \%row_data); } my %final_data; if(!@loop_data) { push @loop_data, {names => 'No names'}; %final_data = @loop_data; return \%final_data; }else { %final_data = @loop_data; return \%final_data; } }