my $row = 0; #### $host_info_REF->{$row}->{$key} = $tmp->{$key}; #### $host_info{$row}{$key} = $tmp->{$key}; #### #!/usr/bin/env perl use strict; use warnings; use threads::shared; use Data::Dumper; my @db_data = ( { hostname => 'h0', hinfo0 => 'A', hinfo1 => 'B', hinfo2 => 'C' }, { hostname => 'h1', hinfo0 => 'X', hinfo1 => 'Y', hinfo2 => 'Z' }, ); my %host_info : shared; my $row = 0; for my $db_data (@db_data) { $host_info{$row} = shared_clone({ hostname => delete $db_data->{hostname}, host_info => $db_data }); ++$row; } print Dumper \%host_info; #### $ pm_thr_compdat.pl $VAR1 = { '1' => { 'hostname' => 'h1', 'host_info' => { 'hinfo0' => 'X', 'hinfo1' => 'Y', 'hinfo2' => 'Z' } }, '0' => { 'hostname' => 'h0', 'host_info' => { 'hinfo0' => 'A', 'hinfo1' => 'B', 'hinfo2' => 'C' } } };