Thread getopts: Fehlermeldung nicht initialisierte Variablen, usage einrichten
(7 answers)
Opened by la_dy82 at 2010-12-08 12:14
Ich schaue in meine Glaskugel und sehe das du Getopt::Std zum Parsen der Kommandozeile benutzt.
Beispiel: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/usr/bin/perl use strict; use warnings; use Getopt::Std; use Data::Dumper; my %opts; getopts('hif:', \%opts) || usage(); usage() if(exists($opts{h})); print Dumper(\%opts); sub usage { print "USAGE: $0 -h -i -f <file>\n"; exit; } Variablen sind undefiniert wenn ihnen keine werte zugewiesen wurden. "defined" dient zum testen, ob eine Variable einen Wert enthält. Getopt::Std kann Optionen, die keine Werte erwarten, auch keine Zuweisen, sie sind also "undef". Um heraus zu finden ob solch eine boolsche Option gesetzt wurde, musst du mit "exists" im Hash schauen ob der Eintrag gesetzt wurde. Siehe Beispiel. Korrektur: Getopt::Std setzt boolsche Optionen auf "1" man kann also auch schreiben: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/usr/bin/perl use strict; use warnings; use Getopt::Std; use Data::Dumper; my %opts; getopts('hif:', \%opts) || usage(); usage() if($opts{h}); # <== ohne exists print Dumper(\%opts); sub usage { print "USAGE: $0 -h -i -f <file>\n"; exit; } Ich vermute mal die "undef" werte kommen von einer Zuweiseung wie: Code (perl): (dl
)
my $file=$opts{f} Da ist "$file" undef wenn wenn die option "-f" nicht genutzt wurde. "Dumper" zeigt das einen Schlüssel "f" nicht im Hash ist. Last edited: 2010-12-08 13:27:29 +0100 (CET) |