For starters, you're using parentheses instead of curlies to create your inner hashes (within the SUBMENU keys). This means the data structure you think you have isn't the data structure you actually created. Try passing %menus through Data::Dumper (this is a great module that I find is invaluable for debugging).

Secondly, the print_main_menu and print_sub_menu functions are very similar. I'd suggest refactoring them into a single, more generalized sub that takes a hash reference as a parameter. Tweaking your code slightly gives this:

sub print_menu { my ( $href ) = @_; print "$_\t", $href->{$_}, "\n" for ( sort keys %{ $href } ); }

There are additional errors, also. For example, I don't think you really wanted $menu->{$_} (in print_main_menu), unless you have a hash ref assigned to $menu somewhere that isn't shown in this example. I suspect you meant to refer to %menus, which is not a reference so the keys would be accessed by $menus{$_}.

Finally, since it wasn't obvious in your example, use strict and warnings! :-)


In reply to Re: Printing a subset of a data structure by bobf
in thread Printing a subset of a data structure by tcf03

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.