use strict; my %tables = ( 'Table_1' => {'Schema' => 'dbo'}, 'Table_2' => {'Schema' => 'dbo'} ); my %fields = ( 'Table_1' => { 'Field_1' => {'Datatype' => 'int', 'Position' => 1}, 'Field_2' => {'Datatype' => 'char', 'Position' => 2}, 'Field_3' => {'Datatype' => 'int', 'Position' => 3} }, 'Table_2' => { 'Field_1' => {'Datatype' => 'float', 'Position' => 1} } ); foreach my $table (sort keys %tables) { foreach my $field (sort {$fields{$table}{'Position'}{$a} <=> $fields{$table}{'Position'}{$b}} keys %{$fields{$table}}) { print "$table -> $field\n"; } } #### $fields{$tablename}{$fieldname}{'Position'} #### $fields{$tablename}{'Position'}