my %hash = ( "func" => \$func, "func2 => \$func2, ... "func1000 => \$func1000 ); while () { &menu(); print "select: "; chomp($string = ); if ($hash{$string}) { $hash{$string}->(); } else { print "No such command: $string\n"; sleep 1; system("clear"); } } sub quit { exit; } sub func { blah... } sub func2 { blah2... } sub menu { while( my ($k, $v) = each %hash) { print "$k \n"; } }