Thread Probleme mit GetOpt::Long
(19 answers)
Opened by YAPD at 2019-06-23 15:58
Schau mal nach, was in der Variable zur Option "-Verify" drin steht.
Verify erfordert zwingend ein Argument (einen String; beachte das "Verify=s" im GetOptions()-Aufruf). Das dürfte in diesem Fall eben "-Module" sein. Damit ist die Option Verify zufrieden gestellt und dann wird kein "-Module" mehr als Option gefunden... PS: Siehe dazu auch https://metacpan.org/pod/Getopt::Long#Options-with... perldoc Getopt::Long (Hervorhebung von mir) Letzten Endes musst Du Dich entscheiden, welche Optionen optionale oder erzwungene Argumente haben sollen. Falls Strings mit "-" oder "--" beginnend nie ein gültiges Argument sein können, könntest Du vor der Kontrolle ob -Verify mit -Module angegeben wurde, prüfen, ob das Argument ungültig ist und abbrechen und eine entsprechende Ausgabe liefern. PPS: Je nach Anwendungsfall könnte man auch eine Subroutine verwenden, die direkt die Option und das Argument überprüft. Schema (ungetestet): Code (perl): (dl
)
1 2 3 GetOptions( "Verify=s" => sub { die "ungültiges Argument für Option $_[0]\n" if $_[1] =~ m/^-/; $Verify = $_[1]; }, ) or exit 255; Anstatt jeweils eine anonyme Routine zu schreiben, könnte man auch eine Check_Routine schreiben, und diese aufrufen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 sub Check_Single_Option { ( $opt_name, $opt_value, $regex ) = @_; if ( $opt_value !~ $regex ) { die "Ungueltiges Argument fuer $opt_name\n"; } else { return $opt_value; } } GetOptions( "Verify=s" => sub { Check_Single_Option( @_, qr/^[^-/ ) }, ) or exit 255; Die anonyme Sub braucht es hier auch, damit der Regex zur Prüfung mit übergeben werden kann. Last edited: 2019-06-24 20:35:04 +0200 (CEST) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |