Wie kann ich ein einfaches Menü in Perl?

Ich arbeite an einem Perl-Skript, erfordert einige grundlegende Menü-Funktionalität. Letztendlich würde ich wie jedes Menü mit ein paar Optionen und dann entweder die option zum zurückkehren zum vorherigen Menü oder beenden.

Beispiel:

Dies ist ein Menü:

  1. Wahl 1
  2. Wahl 2
  3. Zurück zum vorherigen Menü
  4. Ausfahrt

Wählen Sie eine option:

Momentan habe ich ein Menü-Unterroutine machen den Menüs, aber es gibt keine Funktionen und erlaubt es, um zurück zum vorherigen Menü.

    sub menu
    {
        for (;;) {
            print "--------------------\n";
            print "$_[0]\n";
            print "--------------------\n";
            for (my $i = 0; $i < scalar(@{ $_[1]}); $i++) {
                print $i + 1, "\.\t ${ $_[1] }[$i]\n";
            }
            print "\n?: ";
            my $i = <STDIN>; chomp $i;
            if ($i && $i =~ m/[0-9]+/ && $i <= scalar(@{ $_[1]})) {
                return ${ $_[1] }[$i - 1];
            } else {
                print "\nInvalid input.\n\n";
            }
        }
    }

    # Using the menu
    my $choice1  = menu('Menu1 header', \@list_of_choices1);

    # I would like this menu to give the option to go back to
    # the first menu to change $choice1
    my $choice2 = menu('Menu2 header', \@list_of_choices2);

Ich will nicht zu hart code alle Menüs und verwenden if/elsif-Anweisungen für alle von der Verarbeitung so wandte ich mich der Menü-Funktion.

Meine Menüs derzeit so Aussehen...

Menü-Header:

  1. Choice1
  2. Auswahl2
  3. Choice3

?: (Geben Sie hier eingeben)

Diese Lösung noch nicht erlauben den Benutzer, um zurück zum vorherigen Menü oder beenden obwohl. Ich wurde überlegt, einen menu-Klasse zu behandeln, die Menüs, aber ich bin noch nicht sehr gut mit objektorientiertem Perl. Dies ist ein kleines Programm, mit nur ein paar Menüs, so dass durch eine komplexe Menü-Aufbau-Modul kann overkill. Ich möchte, dass mein code so leicht wie möglich.

EDIT:

Danke für die schnellen Antworten! Es ist aber immer noch ein Problem. Wenn ich wählen Sie eine option aus "Menu1" und Laufe auf "Menu2" ich möchte, dass das speichern der Auswahl von "Menu1" für die spätere Verwendung:

Menu1:

  1. Choice1 <-- speichern Sie Wert, wenn ausgewählt, und gehen Sie zum nächsten Menü
  2. Auswahl2 <-- ...
  3. Exit <-- beenden

Menu2:

  1. Choice1 <-- speichern Sie Wert, wenn ausgewählt, und gehen Sie zum nächsten Menü
  2. Auswahl2 <-- ...
  3. Zurück <-- zurück zum vorherigen Menü erneut Wert
  4. Exit <-- beenden

Auswahl entweder Choice1 oder Auswahl2 sollte speichern einen Wert in einer Variablen für die spätere Verwendung und Fortschritt zum nächsten Menü. Dann, wenn Sie sich entscheiden, gehen Sie zurück zum ersten Menü Menu2, wird es geben Ihnen die Möglichkeit, erneut Ihre Auswahl und definieren Sie die variable. Ich versuche zu vermeiden Sie die Verwendung globaler Variablen, die macht dies sehr schwierig.

Nach voran durch alle Menüs und Einstellung der Werte aller dieser Variablen möchte ich eine Unterroutine ausführen zu verarbeiten, all der Wahlen, und drucken Sie eine endgültige Ausgabe.

 sub main () {

   # DO MENU STUFF HERE

   # PROCESS RESULTS FROM MENU CHOICES
   my $output = process($menu1_choice, $menu2_choice, $menu3_choice, ... );
 }

Auch wenn jemand einen objektorientierten Ansatz, um diese Klassen benutzen oder einige andere Daten-Struktur, obwohl es vielleicht übertrieben, ich würde immer noch gerne sehen und versuchen, wickeln Sie meinen Kopf herum, die Idee!

InformationsquelleAutor tjwrona1992 | 2014-08-22
Schreibe einen Kommentar