use strict; use warnings; use Data::Dumper; my %nhash; my %main = ( 'main1' => {'m1sec1'=> ['A','B','C'],}, 'main2' => {'m2sec1'=> ['D','E','F'],},); my %seed = ( 'seed' => {'seed1'=> ['X','Y','Z']},); my @main1 = @{$main{'main1'}{'m1sec1'}}; my @main2 = @{$main{'main2'}{'m2sec1'}}; my @seed_a = @{$seed{'seed'}{'seed1'}}; my @m1sec1; my @m2sec1; for my $s (@seed_a) { push @m1sec1, "$_$s" for (@main1); push @m2sec1, "$_$s" for (@main2); } $main{'main-join1'} = {'m1sec1' => [@m1sec1]}; $main{'main-join2'} = {'m2sec1' => [@m2sec1]}; print Dumper \%main;