my %menus = ( '1' => { 'ITEM' => 'List and Kill UDT* processes by user', 'ACTION' => $RunCMD->('ListKillProc') }, '2' => { 'ITEM' => 'List and Kill Print Jobs', 'ACTION' => $PrintSubmenu->('2'), 'SUBMENU' => { '1' => ( 'ITEM' => 'Show all Printers', 'ACTION' => $RunCMD->('showprintersall') ), '2' => ( 'ITEM' => 'Show user print jobs', 'ACTION' => $RunCMD->('showprintersuser') ), '3' => ( 'ITEM' => 'Show single printer', 'ACTION' => $RunCMD->('showprinter') ), '4' => ( 'ITEM' => 'Kill a print job', 'ACTION' => $RunCMD->('killprint') ) } }, '3' => { 'ITEM' => 'Manage user accounts', 'ACTION' => $PrintSubmenu->('3'), 'SUBMENU' => { '1' => ( 'ITEM' => 'Unlock user account', 'ACTION' => $RunCMD->('unlockuser') ), '2' => ( 'ITEM' => 'Change account password', 'ACTION' => $RunCMD->('changepass') ) } }, '4' => { 'ITEM' => 'Run App', 'ACTION' => $RunCMD->('APP') }, '5' => { 'ITEM' => 'quit', 'ACTION' => $RunCMD->('quit') } ); .. SNIP .. my $print_menu = \&print_main_menu; my $PrintSubmenu = \&print_sub_menu; #$print_menu->(); $PrintSubmenu->('3'); ################### sub print_main_menu ################### { print "$_\t", $menu->{$_}->{'ITEM'}, "\n" for ( sort keys %menus ); } ################## sub print_sub_menu ################## { my $MenuItem = shift; #print "$_\t", $menu->{$MenuItem}->{'SUBMENU'}->{$_}->{'ITEM'}, "\n" # for ( sort keys %{ $menus{$_} } ); for my $Items ( sort keys %{ $menus{$MenuItem}{'SUBMENU'} } ) { print "$menus{$MenuItem}{'SUBMENU'}{$Items}\n"; } #print Dumper %{ $menu->{$MenuItem}->{'SUBMENU'} }; }