0

仍然对 perl 感兴趣,并试图学习如何将它与 MySQL 一起使用来完成数据库任务。我有我希望不要远离为用户提供菜单的 perl 脚本的开始,而不是要求输入,我从数字 1 开始,它将用户输入加载到我之前指定的表中,我的question is, what is an efficient way to return to the menu print statement when that selection has been completed? 所以他们可以继续创建帐户等?

print "User Menu(please select 1-5):\n 1)Create a new account\n 2)List all the times       that an account has logged in\n 3)Log in/out of account\n 4)Drop and re-create the     necessary database tables\n 5)Quit\n";

$userInput = <>;

if($userInput == 1){
print "Please enter a user name: ";
$user_name = <>;
print "Please enter a password: ";
$password = <>;
$dbh->do("INSERT INTO user_accounts VALUES ('$user_name','$password')");
   #Trying to loop back to the menu.....
#}elsif($userInput == 2){
   #test:print "I am number 3";
#}elsif($userInput == 3){
   #test:print "I am number 3";
#}elsif($userInput == 4){
   #$dbh->do('DROP TABLE IF EXISTS user_accounts');
#test print "I am number 4";
}else{
exit;
}
4

1 回答 1

1

我一开始以为你想在后台执行任务,但如果你只想返回菜单,把整个事情放在一个循环中。

另外,查看IO::PrompterPrompt::ReadKey中的编号菜单

use strict;
use warnings;

run();

sub run {
    my %dispatch = (
        1 => \&create_account,
        2 => \&list_log,
        3 => \&log_in_out,
        4 => \&recreate_tables,
        5 => \&quit,
    );

    while (1) {
        {
            local $| = 1;
            print menu(), '> ';
        }

        my $choice = <>;

        $choice =~ s/\A\s+//;
        $choice =~ s/\s+\z//;

        if (defined(my $handler = $dispatch{$choice})) {
            my $result = $handler->();
            unless (defined $result) {
                exit 0;
            }
        }
        else {
            warn "Invalid selection\n";
        }
    }
}

sub menu {
    return <<EO_MENU;
User Menu (please select 1-5):
1) Create a new account
2) List all the times that an account has logged in
3) Log in/out of account
4) Drop and re-create the necessary database tables
5) Quit
EO_MENU
}

sub create_account { print "create\n" }

sub list_log { print "list_log\n" }

sub log_in_out { print "log_in_out\n" }

sub recreate_tables { print "recreate_tables\n" }

sub quit { }
于 2013-03-22T01:12:32.500 回答