Downtown_market : (Fruit, More_fruit, Even_more_Fruit) Uptown_Market : (Fruit, More_fruit, ) East_Markey : ( , , Even_More_Fruit) #Note: Spaces are there for effect, to show I am skipping parts #### use Data::Dumper; my %hash; my %hash_2; my %over_hash; my @array_1 = ('value'); #eg. grape. my @array_2 = ('value_2'); #eg. orange my @array_3 = ('value_3'); my @array_4 = ('value_4'); $hash{'key1'}=[@array_1]; #eg. Fruit $hash{'key2'}=[@array_2]; #eg. More_Fruit $hash{'key3'}=[@array_3]; $hash{'key4'}=[@array_4]; $hash_2{'key1'}=[@array_1]; $hash_2{'key2'}=[@array_2]; $hash_2{'key4'}=[@array_4]; $over_hash{'key1'} = [%hash]; #eg. Downtown_Market $over_hash{'key2'} = [%hash_2]; #eg. Uptown_market print Data::Dumper->Dumpxs([\%over_hash], [q{*over_hash}]); foreach my $unlocked (keys %over_hash) { my %internal_hash = @{$over_hash}{$unlocked}; foreach my $keys (keys %internal_hash) { my @print_value = @{$internal_hash{$keys}}; } print "@print_value\n"; } #order to print = (key1, key3, key4, key2); # how do I make the hash print in the order I want. # while leaving blanks for positions that are missing. #e.g. #overhash_key1 : key1 : key3 : key4, key2 #overhash_key2 : key1 : : key4, key2