0

まだ perl に慣れていないので、データベース タスクを実行するために MySQL と一緒に使用する方法を学ぼうとしています。ユーザーにメニューを提供する perl スクリプトの開始点から、入力を求めるよりもはるかに離れていないことを願っています。ユーザー入力を以前に指定したテーブルにロードする番号 1 から始めました。質問は、その選択が完了したときに menu print ステートメントに戻る効率的な方法は何ですか? それで、彼らはアカウントなどを作成し続けることができましたか?

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::PrompterまたはPrompt::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 に答える