Thread Probleme mit GetOpt::Long
(19 answers)
Opened by YAPD at 2019-06-23 15:58
Hi,
nochmal zu Deiner Auflistung: zu 1.) Ich finde es besser, wenn man die langen Optionsnamen mit "--" beginnt und die kurzen mit "-" . Allerdings ist Getopt::Long hier recht gnädig in seinen Default-Einstellungen. zu 2.) Wenn Du $Module mit einem (sinnvollen) Wert vorbelegst, ist es aufwändiger zu prüfen, ob er zusammen mit der Option "-Verify" angegeben wurde oder nicht. Ich würde ihn eher mit einem ungültigen Wert (z.B. undef) vorbelegen und nach dem GetOptions-Aufruf prüfen, ob "-Verify" gesetzt wurde und ob $Module dann einen sinnvollen Wert hat (also auch gesetzt wurde). Wenn kein "-Verify" gesetzt wurde, kann $Module auf einen Standardwert gesetzt werden. zu 3.) Siehe meine Antwort zum Signal-Hook für Warnings. zu 4.) siehe 3. zu 5.) Und was ist hier Deine Bedingung? Hier beschreibst Du erstmal nur ein Verhalten von Getopt::Long. Ich erkenne nicht, was Du willst? Soll er bei "-v" NICHT annehmen, dass "--Verify" gemeint wäre? Gruß, Linuxer PS: Hier eine mögliche Version, soweit wie ich Dich verstanden habe: Code (perl): (dl
)
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 #! /usr/bin/perl use strict; use warnings; use 5.020; use Getopt::Long; Getopt::Long::Configure( qw( no_ignore_case no_bundling no_auto_abbrev ) ); #> sub routines #> -------------------------------------------------------------------- sub modified_warnings { my ( $message ) = @_; $message =~ s/Unknown option: .+/Parameter - Fehler/; $message =~ s/Option (.+) requires an argument$/Parameter $1 benoetigt ein Argument./; print STDERR $message; } sub print_help { say "How to call me.\n"; } #> main programm #> -------------------------------------------------------------------- my $Debug = 'Bob'; my $Module = undef; my $Verify = 0; my $Help = 0; { local $SIG{__WARN__} = \&modified_warnings; GetOptions( 'Debug=s' => \$Debug, 'Module=s' => \$Module, 'Verify=s' => \$Verify, 'Help' => \$Help, ) or die "Falsche Verwendung!\n"; }; if ( $Help ) { print_help(); exit 0; } # Wenn -Verify gesetzt wurde, muss -Module ebenfalls gesetzt werden if ( $Verify ) { if ( ! $Module ) { die "--Verify erfordert die gleichzeitige Angabe von --Module\n"; } } # Ansonsten setze $Module auf einen Defaultwert, wenn es nicht angegeben wurde elsif ( ! $Module ) { $Module = 26; } __END__ Ergibt: Code: (dl
)
1 $ perl getopt_long.pl Last edited: 2019-06-23 20:17:17 +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! |