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