Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10811[/thread]

Paramter Uebergabe



<< >> 5 Einträge, 1 Seite
stephanb
 2007-11-16 18:54
#102491 #102491
User since
2007-03-27
10 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe ein kleines Problem bei der Übergabe mit Parametern.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub initialize {
my @path = split('/', $0);
$ME = pop @path; # the skriptname = $ME
GetOptions ( "help|?"=> \$help,
"daily" => \$daily,
"weekly" => \$weekly,
"monthly" => \$monthly );

usage() if $help;
unless ( $daily || $weekly || $monthly ) { usage (); }
return 0;
}
##################################################################
sub usage {
print "Usage: $ME -h (this help) -daily -monthly -weekly (only one option is possible) \n";
exit;
}
##################################################################

Soweit funktioniert die Übergabe schon, also in main kann ich auf $daily, $monthly oder $weekly zugreifen.
Ich moechte das aber nur eine übergeben werden darf. Wie bekomme ich das hin ?

z.B. skript -daily -weekly
Dann darf nur daily ausgeführt werden usw.

Danke schon mal im voraus
Linuxer
 2007-11-16 19:31
#102492 #102492
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Hi,

werde bitte deutlicher, was Du genau willst.

Ich sehe folgende Reaktionsvarianten, wenn mehr als eine der drei Varianten angegeben wird:

- Skript beendet sich mit entsprechender Fehlermeldung (bitte nur a oder b oder c)

- der erste der gegebenen Parameter wird genutzt (könnte über eine Subroutine realisiert werden, die die Werte setzen muss)

- es gibt eine Wertigkeit der Parameter, nach der entschieden wird; a vor b vor c ; also wenn a und b gegeben sind, wird nur a gewertet ...

Was stellst Du Dir vor?
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!
ptk
 2007-11-16 21:44
#102494 #102494
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Code: (dl )
if (($daily && $weekly) || ($daily && $monthly) || ($weekly && $monthly)) { usage() }
sollte funktionieren. Oder du verwendest einen Hash:
Code: (dl )
1
2
GetOptions("daily" => \$p{daily}, "weekly" => \$p{weekly}, "monthly" => \$p{monthly}, ...);
if (1 != grep $_, values %p) { usage() }

(ungetestet)
stephanb
 2007-11-16 22:09
#102497 #102497
User since
2007-03-27
10 Artikel
BenutzerIn
[default_avatar]
Ja es sollte nur ein Parameter maximal übergeben werden.
Danke schön für die Hilfe.
Mit der if Abfrage funktioniert es.
Dubu
 2007-11-25 15:46
#102981 #102981
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
ptk+2007-11-16 20:44:49--
Code: (dl )
if (($daily && $weekly) || ($daily && $monthly) || ($weekly && $monthly)) { usage() }
sollte funktionieren. Oder du verwendest einen Hash:
Code: (dl )
1
2
GetOptions("daily" => \$p{daily}, "weekly" => \$p{weekly}, "monthly" => \$p{monthly}, ...);
if (1 != grep $_, values %p) { usage() }


Man könnte auch ohne den Hash, aber trotzdem mit grep arbeiten. Man spart sich die Permutationen.
Code (perl): (dl )
1
2
3
if (1 != grep { defined } ($daily, $weekly, $monthly)) {
    usage();
}

Ich weiß nicht, ob es bei drei Optionen wirklich übersichtlicher ist. Je mehr Optionen es werden, desto größer ist wohl der Vorteil.
<< >> 5 Einträge, 1 Seite



View all threads created 2007-11-16 18:54.