in reply to Re: Simple text menu
in thread Simple text menu

I think the subroutine is not entirely correct. Without te Carp which I don't have on my system I came up with this working version:
sub menu { my ($title, @option) = @{shift(@_)}; my (@name, @action); ($name[@name], $action[@action]) = splice @option, 0, 2 while @option; while(1) { print "\n$title\n"; print map "$_. $name[$_ - 1]\n", 1 .. @name; print '> '; chomp (my $choice = readline *STDIN); if ($choice and $choice > 0 and $choice <= @action) { my $do_action = $action[$choice-1]; return unless defined $do_action; $do_action->() if 'CODE' eq ref $action[$choice-1]; menu($action[$choice-1]) if 'ARRAY' eq ref $action[$choice-1]; + } else { print "Invalid choice: $choice\n" } } }

Replies are listed 'Best First'.
Re^3: Simple text menu
by jdporter (Paladin) on Aug 08, 2012 at 17:31 UTC
    Carp which I don't have on my system

    Are you sure? What happens when you type:

    perl -MCarp -e0
    Carp is standard. If you don't have it, your perl installation is seriously b0rken.

      My mistake. It is there all right. I jumped to the wrong conclusion because it gave an error when trying the script.