1 2 3 4 5 6 7 8
while($input ne '3'){ print "Aktion: "; $input = <STDIN>; chomp($input); switch ($input){ case '1'{ Code.... }
2016-03-14T12:18:24 MuffiIch glaub jetzt hab ich das erst kapiert. Dein Problem ist nicht der Switch, sondern wie du an das "1" kommst, wenn es nicht per <STDIN> ankommt?
Da gibt's (ja, in Perl gibt's wenn man will IMMER NOCH mehr Möglichkeiten)
2 Möglichkeiten.
Wenns wirklich einfach ist, z.B. "./mein_irgendwas_perl.pl 1"
dann stehn die ganzen übergebenen Argumente in einem Array namens @ARGV.
Wenns komplexer als dieser Fall ist gibt's z.B. das Modul Getopt::Long. Das würd ich dann benutzen, bevor man selber was wirres zusammenbastelt.
2016-03-15T07:29:08 MuffiDas kann man jetzt von der Ferne schlecht erraten.
Wie schaut denn dein Code aus?
2016-03-16T08:17:17 MuffiWenn irgendwas in einer Endlossschleife ausgeführt wird, dann wirst du wohl eine Endlosschleife programmiert haben. Wenn daran der Code keine Relevanz hat, was dann?
2016-03-16T08:50:13 MuffiDa seh ich eine while-schleife, die $input benutzt.
Da du ja nicht helfen willst rate ich mal, dass man vielleicht per Menü öfter irgendwas ausführen kann. Und weiter rate ich, dass das wohl so keinen Sinn macht, wenn man per Parameter fix eine Zahl übergibt.
Und weiter rate ich, dass so vielleicht deine Endlossschleife entstanden sein könnte.
So, nun ist meine Kristallkugel leider abgenutzt. rien ne va plus.
1 2 3 4 5 6 7 8 9 10
hile($input ne '3'){ print "Aktion: "; $input = <STDIN>; chomp($input); switch ($input){ case '1'{ ....CODE.... } case '2'{ ....CODE.... } case '3'{ exit(0); #Programm beenden... }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
# Standard, sollte fast immer eingebunden werden use strict; use warnings; # Modul zum Optionen behandeln use Getopt::Long; # Hash, um Flags (ein/aus, ja/nein) zu verwalten my %FLAG = ( RUNS_AS_CRON => 0, ); # Hash, um Optionen mit Werten zu verwalten; z.B. --dummy "string" wird zu $OPT{dummy} = 'string'; my %OPT = ( dummy => '', ); ### MAIN # Verarbeite die gegebenen Optionen von der Kommandozeile; alles was übrig bleibt, bleibt in @ARGV GetOptions( 'as-cron' => \$FLAG{RUNS_AS_CRON}, 'dummy=s' => \$OPT{dummy}, ) or exit 255; # Wenn das Flag "RUNS_AS_CRON" gesetzt wurde, dann tu etwas passendes; z.B. eine While-Schleife umgehen, weil nicht interaktiv gearbeitet wird if ( $FLAG{RUNS_AS_CRON} ) { # runs as cron job } # Wenn nicht, läuft das Programm wohl normal; wahrscheinlich interaktiv else { # runs normally? print "Dummy is: >", $OPT{dummy}, "<\n"; }
1 2 3 4 5 6 7 8 9 10
if ( $FLAG{RUNS_AS_CRON} ) { $input = 1; // Case 1 ausführen }elsif ($FLAG{RUNS_AS_CRON2}){ $input = 2; //Case Zwei ausführen }else{ Sonst Menü einblenden... print "Aktion: "; $input = <STDIN>; chomp($input); }
1
2
3
4
5
6
7
# Verarbeite die gegebenen Optionen von der Kommandozeile; alles was übrig bleibt, bleibt in @ARGV
GetOptions(
'as-cron' => \$FLAG{RUNS_AS_CRON},
'dummy=s' => \$OPT{dummy},
) or exit 255;