Schrift
[thread]8450[/thread]

Getopt::Long und Abhängigkeit der Optionen.



<< >> 5 Einträge, 1 Seite
toby
 2006-10-26 02:07
#71183 #71183
User since
2006-04-14
66 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich bastle gerade an Useroptionen rum und finde in "perldoc Getopt::Long" keine Möglichkeit einige der Optionen zueinander abhängig zu machen, dh wenn option1 angegeben wurde, darf option2, usw, vom User nicht angegeben werden. Muss man hier wirklich selber solche Logik einbauen, oder liefert Getopt::Long (oder anderes Modul) doch so einen Schalter ?

Bis jetzt habe ich das hier:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
[...]
my %optionen;
my @opts = (
"option1=s",
"option2=s",
"option2=s",
"help|?",
"man",
);
GetOptions(\%optionen, @opts);
[...]


Es funktioniert super, allerdings soll hier wie erwähnt entweder "option1", oder "option2", oder "option3" einzeln vom user angegeben werden dürfen. Beim gleichzeitigen Benutzen ( in beliebiger Kombination) der optionen gemeinsam soll gemeckert werden.

Bitte um einen Tip. :)
Danke
Tobias
ptk
 2006-10-26 09:50
#71184 #71184
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
AFAIK kann das Getopt::Long nicht. Du musst die Bedingung (ungetestet:
Code: (dl )
die if ((defined $optionen{option1} && (defined $optionen{option2} || defined $optionen{option3})) || (defined $optionen{option2} && defined $optionen{option3}))
) selbst hinschreiben.
nepos
 2006-10-28 20:31
#71185 #71185
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sowas kann Getopt::Long nicht. Es nimmt dir nur die Arbeit ab, dass du die Kommandozeile selbst parsen musst. Welche Kombinationen zulaessig sind und welche nicht, das musst du, wie ptk schon sagt, selber coden.
betterworld
 2006-10-29 02:48
#71186 #71186
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=ptk,26.10.2006, 07:50]
Code: (dl )
die if ((defined $optionen{option1} && (defined $optionen{option2} || defined $optionen{option3})) || (defined $optionen{option2} && defined $optionen{option3}))
[/quote]
Geht auch kuerzer:
Code: (dl )
die if 1 <= defined($optionen{option1}) + defined($optionen{option2}) + defined($optionen{option2});

(Man beachte, dass dies keine Warnungen a la 'Argument "" isn't numeric in addition' ausgibt)

Wenn mindestens eine der Optionen gesetzt sein soll, mach "==" aus "<=".

Wenn Getopt::Long das unterstuetzen sollte, muesste es schon eine eigene Scriptsprache mitbringen... meines Erachtens ueberfluessig ;)\n\n

<!--EDIT|betterworld|1162076333-->
toby
 2006-10-29 22:56
#71187 #71187
User since
2006-04-14
66 Artikel
BenutzerIn
[default_avatar]
Hallo Leute! :)

geile Idee das mit 'die if 1 <= ... + ...'. ;)

Habe es als 'pod2usage(1) if( 1 <= ....' eingebaut und es funzt wunderbar *freu*

Vielen Dank! :)
Tobias
<< >> 5 Einträge, 1 Seite



View all threads created 2006-10-26 02:07.