use strict; use warnings; use Data::Dumper; my %types = ( TYPE1 => [ { NAME => 'Joe', ID => '022'}, { NAME => 'Sue', ID => '088'}, { NAME => 'Tom', ID => '108'} ], TYPE2 => [ { NAME => 'Sue_B', ID => '089'}, { NAME => 'Sue_C', ID => '090'} ] ); splice @{$types{TYPE1}}, 1, 1, @{$types{TYPE2}}; print Dumper(\%types) #### $VAR1 = { 'TYPE2' => [ { 'ID' => '089', 'NAME' => 'Sue_B' }, { 'ID' => '090', 'NAME' => 'Sue_C' } ], 'TYPE1' => [ { 'ID' => '022', 'NAME' => 'Joe' }, $VAR1->{'TYPE2'}[0], $VAR1->{'TYPE2'}[1], { 'ID' => '108', 'NAME' => 'Tom' } ] };