Verständnisprobleme mit Getopt::Long
Verständnisprobleme mit Getopt::Long
am 12.03.2007 19:33:57 von Mario Adam
Hallo zusammen,
in einem Perl-Script verwende ich das Modul Getopt::Long. Dazu verwende
ich folgenden Code:
use Getopt::Long qw(:config no_ignore_case bundling);
Getopt::Long::Configure("prefix_pattern=(-|\/)");
GetOptions(\%config, qw(tribes|T allies|A villages|V servers|S
conquers|C simulate|s delete|d verbose|v help|?|h));
Ich möchte nun erreichen, dass der Parameter "servers" (bzw: "S"), wie
optional ein Argument erhalten kann. Dazu nun einfach "servers|S" in
"servers|S:s" geändert. OK - doch damit komm ich zum nächsten Problem.
Ich überprüfe an manchen Stellen mit folgender Bedingung:
if ($config{servers}) { }
Wenn der Paramater S also nicht angegeben wurde, soll $config{servers}
false oder leer sein (mir soll beides recht sein...). Wurde der
Parameter ohne Argument übergeben, soll als Default "*" oder so was
gelten. Das Problem ist:
if ($config{servers} == '') { }
ist sowohl true, wenn der Parameter ohne Argument angegeben wurde, als
auch, wenn er *gar nicht* angegeben wurde.
Habt ihr eine elegante Idee für mich?
Beste Grüße
Mario Adam
Re: Verständnisprobleme mit Getopt::Long
am 12.03.2007 20:12:46 von Frank Seitz
Mario Adam wrote:
> Das Problem ist:
>
> if ($config{servers} == '') { }
>
> ist sowohl true, wenn der Parameter ohne Argument angegeben wurde, als
> auch, wenn er *gar nicht* angegeben wurde.
>
> Habt ihr eine elegante Idee für mich?
1) Setze an den Anfang aller Deiner Programme/Module:
use strict;
use warnings;
2) == vergleicht in Perl Zahlen, keine Strings. Strings werden
in Perl mit eq verglichen.
3) Mit existst() prüfst Du die Existenz eines Hash-Key,
mit defined() die Existenz eines Hash-Werts.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Verständnisprobleme mit Getopt::Long
am 12.03.2007 20:25:35 von Mario Adam
Frank Seitz schrieb:
> 1) Setze an den Anfang aller Deiner Programme/Module:
>
> use strict;
> use warnings;
Sowieso. Wollte euch ja nur nicht mit nicht relevanten Codepassagen
zumüllen ;-)
>
> 2) == vergleicht in Perl Zahlen, keine Strings. Strings werden
> in Perl mit eq verglichen.
>
> 3) Mit existst() prüfst Du die Existenz eines Hash-Key,
> mit defined() die Existenz eines Hash-Werts.
aah - danke... das hilft mir...
> Grüße
> Frank
Merci beaucoup...
Ciao
Mario
Re: Verständnisprobleme mit Getopt::Long
am 12.03.2007 20:33:20 von Wolf Behrenhoff
Frank Seitz schrieb:
> 3) Mit existst() prüfst Du die Existenz eines Hash-Key,
^
Da ist dir 1 Buchstaben zu viel reingerutscht... Perl ist nicht so
geschwätzig ;-)
Wolf
Re: Verständnisprobleme mit Getopt::Long
am 12.03.2007 20:41:21 von Frank Seitz
Wolf Behrenhoff wrote:
> Frank Seitz schrieb:
>>
>>3) Mit existst() prüfst Du die Existenz eines Hash-Key,
> ^
> Da ist dir 1 Buchstaben zu viel reingerutscht... Perl ist nicht so
> geschwätzig ;-)
Zumal es nichtmal ein englisches Wort ist...
Danke für die Richtigstellung.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel