You have a hash of hashes, so have a look at https://perldoc.perl.org/perldsc.html#HASHES-OF-HASHES for more details.
You could also simplify the for-loop by dereferencing before the sort, and take advantage of implied quoting of hash keys. You may or may not like double sigil dereferencing, but I find them visually cleaner.
foreach my $table (sort keys %tables) { my $href = $fields{$table}; foreach my $field (sort $href->{Position}{$a} <=> $href->{Position}{ +$b}} keys %$href) { print "$table -> $field\n"; } }
Update a few minutes after posting:
I neglected to comment on reliability. So long as your hashes al follow the same structure then your approach will be reliable. If you are missing the Position key then you will get warnings about undefined values which you will need to handle (make sure to use warnings as well as use strict.
Update 2: haukex pointed out in the chatterbox that my updated code also does not work. See 11106707. That will hopefully teach me to post without testing...
In reply to Re: Sorting a hash by a well buried key
by swl
in thread Sorting a hash by a well buried key
by lb483
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |