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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.