Schrift
[thread]8379[/thread]

getOptions - Problem: getOptions

Leser: 1


<< >> 6 Einträge, 1 Seite
rupe
 2006-10-02 13:33
#70430 #70430
User since
2006-10-02
4 Artikel
BenutzerIn
[default_avatar]
Hallo, Leute!

Ich hab da ein kleines Problem mit GetOptions!
Wenn ich diese Funktion nutze um bestimmte werte zu übergeben,
dann werden dabei keine Unterschiede gemacht!

Möglichkeiten:
meineFunktion
meineFunktion -w
oder:
meineFunktion -w test

Dafür hab ich nun >>"k:s" => \$kill,<< verwendet!

Nun wird aber kein Unterschied zwischen möglichkeit 1 u. 2 erkannt!

Um diese Problem zu lösen! Hab ich die Variable $kill schon vorher mit einen Wert definiert, also: my $kill = -1;

Wird jetzt "meineFunktion -w" aufgerufen wird die Variable $kill wieder mit "" überschrieben.

Es funktioniert aber damit bin ich überhaupt nicht Zufrieden!

Nun meine eigentliche Frage:
Gibt es eine schöner Möglichkeit um diese drei Möglichkeiten abzufragen?

Hier noch ein Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl

use Getopt::Long;

GetOptions("k:s" => \$kill);


if (!$kill) {
print "\$kill existiert nicht\!\n";
}
elsif ($kill eq "") {
print "\$kill existiert und ist NULL\!\n";
}
elsif ($kill) {
print "\$kill existiert und ist $kill\!\n";
}
else {
print "ist else!\n";
}

exit;


MFG
Rupe
renee
 2006-10-02 14:00
#70431 #70431
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Besser kann man es eigentlich nicht machen - was das Abfragen angeht. Du solltest aber Wiki:use strict verwenden.

Dann sollte Dein Code ungefähr so aussehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl

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

my $kill;
GetOptions('k:s' => \$kill,);

if(! defined $kill){
print '$kill is not defined';
}
elsif($kill eq ''){
print '$kill is ""';
}
elsif(defined $kill){
print '$kill is defined and is not ""';
}
else{
print "else";
}
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/
rupe
 2006-10-02 14:23
#70432 #70432
User since
2006-10-02
4 Artikel
BenutzerIn
[default_avatar]
Hey, danke das funktioniert ja!
Is ja cool!

Danke! :)
Thorium
 2006-10-03 12:53
#70433 #70433
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Fällt irgendwem eine Situation für "else" ein?
Also für mich schliesst;
Code: (dl )
1
2
3
if (! a) {
} elsif (a) {
}


ein else irgendwie aus... (gilt natürlich nicht in SQL in Verbindung mit NULL)\n\n

<!--EDIT|Thorium|1159865619-->
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
renee
 2006-10-03 13:08
#70434 #70434
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, aber man sollte trotzdem immer ein else einbauen. Wer weiß, was es in Zukunft bei Perl alles gibt. Und das Skript soll ja auch noch in 3-4 Jahren laufen. Es gehört zu einem guten Design, alle Dinge auch abzuschließen. Und ein if-elsif ist irgendwie nur halbherzig...
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/
Strat
 2006-10-03 16:18
#70435 #70435
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
if( ! a) {
...
}
elsif( a ) {
...
}

finde ich nicht besonders gut, weil ein Programmierer automatisch einen else-Block erwartet, und dann jede Bedingung nochmal explizit pruefen muss. Ich wuerde es folgendermaszen schreiben:
Code: (dl )
1
2
3
4
5
6
unless( a ) { # oder meinetwegen: if( not a )
...
}
else {
...
}


Ich stimme Renee zu\n\n

<!--EDIT|Strat|1159877961-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 6 Einträge, 1 Seite



View all threads created 2006-10-02 13:33.