tattoo3d
tattoo3d

Reputation: 79

Loop back to menu when using perl to build a database?

Still wet behind the ears with perl and trying to learn how to use it along with MySQL to accomplish database tasks. I have what I hope is not to far off of the start of a perl script that offers the user a menu, than asks for input, I have started with number 1 which will load the users input into the table I have specified earlier, my question is, what is an efficient way to return to the menu print statement when that selection has been completed? So they could keep creating accounts etc?

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;
}

Upvotes: 0

Views: 496

Answers (1)

Sinan &#220;n&#252;r
Sinan &#220;n&#252;r

Reputation: 118148

I first thought you wanted to execute tasks in the background, but if all you want is to return to the menu, put the entire thing in a loop.

Also, take a look at numbered menus in IO::Prompter or 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 { }

Upvotes: 1

Related Questions