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

Angabe von Parametern beim Skriptaufruf: Getopt::Long

Leser: 1


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Duff
 2006-11-09 17:31
#71579 #71579
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Hallo,

ich spiele gerade ein wenig mit dem Modul
Code: (dl )
use Getopt::Long;


Habe meine obligatorischen und optionalen Parameter so versucht zu definieren:
Code: (dl )
1
2
3
GetOptions( "e=s"   => \$param1,
"m" => \$param2
);


Mit der Option e funktioniert ja soweit. Also ich möchte, dass ich mein Skript in diesen beiden Varianten aufrufen kann:
Code: (dl )
1
2
3
4
5
./script.pl -e <STRING> 

und so

./script.pl -e <STRING> -m


Ok, aufrufen kann ich es schon so ;-), aber wie fange ich am besten die Optionsparameter ab? Für den Parameter -e habe ich so versucht:

Code: (dl )
1
2
3
4
5
if(!$param1)
{
usage();
exit(1);
}


Nur wie mache ich das bei dem optionalen Parameter -m, der ja keinen Wert haben soll?
D'OH
Daniel
renee
 2006-11-09 17:46
#71580 #71580
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Genauso...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

GetOptions('e=s' => \my $param1,
'm' => \my $param2,);

if($param1){
print 'Option e gesetzt: ',$param1,"\n";
}

if($param2){
print "Option m gesetzt\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Duff
 2006-11-09 17:57
#71581 #71581
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Mmh....

Dann muss ich das ganze nochmal ausprobieren, weil der bei mir irgendwie immer einen Wert hinter dem -m erwartete. Wenn ich nämlich ein print $param2 gemacht habe, kam nichts, es sei denn, ich habe -m Wert geschrieben.
D'OH
Daniel
renee
 2006-11-09 18:07
#71582 #71582
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei obigem Code bekomme ich:
Code: (dl )
1
2
3
4
5
6
C:\community>perl getopt.pl -e test
Option e gesetzt: test

C:\community>perl getopt.pl -e test -m
Option e gesetzt: test
Option m gesetzt
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Duff
 2006-11-09 19:53
#71583 #71583
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Stimmt, hast recht.

Komisch, dann werde ich das wohl morgen doch noch mal überprüfen müssen.

Aber wie fängt man bei einem Skript, bei dem man noch mehr Optionen angeben kann, am besten ab, ob und welche Optionen gesetzt sind?

In der Shell-Programmierung würde ich sagen über eine case-Anweisung, aber so was gibt es ja nicht in perl.
D'OH
Daniel
renee
 2006-11-09 23:06
#71584 #71584
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das lässt sich nur mit ifs erreichen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Duff
 2006-11-10 09:52
#71585 #71585
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Quote
Das lässt sich nur mit ifs erreichen...


Ok, dann werde ich das wohl doch so lösen müssen.

Sieht natürlich nicht so schön aus, wenn man mehrere Optionen hat. Naja.
D'OH
Daniel
renee
 2006-11-10 10:32
#71586 #71586
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ab Perl5.10 wirst Du auch mit "case" (dort: given-when) arbeiten können...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Duff
 2006-11-10 11:05
#71587 #71587
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Danke, dann müss ich wohl noch ein wenig warten.

Habe aber jetzt das Problem, dass ich die Ausgabe bisher so gemacht habe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#foreach my $array ( @{$arrayRef} )
#{
# if($param2) {
# my @result=();
# while ($array->[1] =~ /Match/igm) {
# push @result, $1. " --> " .$2. "\t";
# }
# printf "%-90s : %-s\n", $array->[0], join(" ",@result);
# }else{
# print "$array->[0]\n", "${$array}[1]\n";
# }
#}


So, ich dachte mir, dass die Abfrage nach den verschiedenen angegebenen Parametern wohl nicht so gut sind, wenn ich diese in der foreach-Schleife mache, oder?

Deshalb wollte ich die Abragen einfach in if-elsif-else Anweisungen machen und dann je nach gesetzter Option eine Funktion ausgabe1, ausgabe2, uws. aufrufen, die dann für die Ausgabe zuständig ist.

Doch leider will das nicht so wie ich es gerne hätte.
Habe es mal so probiert:
Code: (dl )
1
2
3
4
5
6
7
sub ausgabe1 {
foreach my $array (my @{$arrayRef} ) {
print "$array->[0]\n", "${$array}[1]\n";
}
}

usw.


Den Aufruf habe ich so probiert (bestimmt auch falsch ;-()
Code: (dl )
1
2
3
4
5
6
if($param2) {
ausgabe2(@{$arrayRef});
}
else {
ausgabe1(@{$arrayRef});
}
D'OH
Daniel
renee
 2006-11-10 11:43
#71588 #71588
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ausgabe1 muss dann so aussehen:
Code: (dl )
1
2
3
4
5
6
sub ausgabe1 {
my @array = @_;
foreach my $element (@array ) {
print $element->[0],"\n", $element->[1],"\n";
}
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2006-11-09 17:31.