2010-03-10 4 views
6

Wenn ich dies tun:Warum druckt mein Perl-Programm die Hilfemeldung, wenn ein Argument 0 als Wert hat?

GetOptions(
    'u=s' => \$in_username, 
    'r=i' => \$in_readonly, 
    'b=i' => \$in_backup 
    ); 

exit usage() unless $in_username && $in_readonly && $in_backup; 

und das Programm wie folgt aufrufen:

./app.pl -u david -r 12 -b 0 

es führt immer in Verwendung() aufrufen, so offensichtlich die 0 nicht als Integer-Wert gesehen. Was kann ich akzeptieren ganzzahlige Werte AND 0?

+4

Ihre Aussage "die 0 wird nicht als ganzzahliger Wert gesehen" ist korrekt, aber "0" wird als falsch interpretiert: "A s Der Calar-Wert wird im Booleschen Sinn als TRUE interpretiert, wenn es nicht die Null-Zeichenkette oder die Zahl 0 (oder deren Zeichenkette-Äquivalent, "0") ist. Der boolesche Kontext ist nur eine spezielle Art von skalarem Kontext, in dem niemals eine Umwandlung in eine Zeichenkette oder eine Zahl durchgeführt wird. "Die Antwort von Dancrumb ist korrekt, wenn auch nicht so explizit wie Ihre falsche Darstellung. Http://perldoc.perl.org/perldata.html – msw

Antwort

11

Wenn sie als boolean behandelt, 0 betrachtet wird von Perl ein falscher Wert zu sein

Sie brauchen so etwas wie

exit usage() unless defined($in_username) && defined($in_readonly) && defined(in_backup); 

EDIT

Bitte auch msw ausgezeichneten Kommentar zu den sehen ursprüngliche Frage

+0

Funktioniert als Charme, vielen Dank! – David