my @allDACDirs = (@configapp1, @configbbb); for my $i (0 .. $#allDACDirs) { ... #### my @configbbb = qw( m:configbbb f:b1.0 f:bb1.0.config ); #### use strict; use warnings; use Data::Dumper; my @allDACDirs = ( { dir => 'conf', root => 'configapp1', files => [ {subdir => 'conf', name => '4K_logging.properties'}, {subdir => 'conf', name => 'logging.properties' }, {name => 'dactest1'}, ] }, { root => 'configbbb', files => [ {name => 'b1.0'}, {name => 'bb1.0.config'}, ] } ); #print Dumper(\@allDACDirs); # for debug for my $href (@allDACDirs) { my %h = %$href; my $curr_dir = "$location/$h{root}"; # mkdir curr_dir... if (exists $h{dir}) { # mkdir curr_dir/$h{dir}... } for my $ref (@{ $h{files} }) { if (exists ${$ref}{subdir}) { # mkdir subdir... # create file... } else { # create file... } } }