Thread Probleme mit GetOpt::Long (19 answers)
Opened by YAPD at 2019-06-23 15:58

Linuxer
 2019-06-23 20:03
#190135 #190135
User since
2006-01-27
3869 Artikel
HausmeisterIn

user image
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:

more (10.3kb):

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
2
3
4
5
6
7
8
9
10
11
 $ perl getopt_long.pl 
$ perl getopt_long.pl -v
Parameter - Fehler
Falsche Verwendung!
$ perl getopt_long.pl --Verify=foo
-Verify erfordert die gleichzeitige Angabe von -Module
$ perl getopt_long.pl --Verify=foo --Module
Parameter Module benoetigt ein Argument.
Falsche Verwendung!
$ perl getopt_long.pl --Verify=foo --Module=42
$

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!

View full thread Probleme mit GetOpt::Long