2010-03-10 7 views
6

Se faccio questo:Perché il mio programma Perl stampa il messaggio di aiuto quando un argomento ha 0 come valore?

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

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

e chiamare il programma come questo:

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

si traduce sempre nel chiamare l'uso(), quindi ovviamente il 0 non è visto come un valore intero. Cosa posso fare per accettare valori interi E 0?

+4

L'affermazione "lo 0 non è visto come un valore intero" è corretto ma "0" viene interpretato come falso: "A s il valore calar è interpretato come TRUE nel senso booleano se non è la stringa nulla o il numero 0 (o la sua stringa equivalente, "0"). Il contesto booleano è solo un tipo speciale di contesto scalare in cui non viene mai eseguita alcuna conversione in una stringa o in un numero. "La risposta di Dancrumb è corretta anche se non è esplicita in merito all'errore. Http://perldoc.perl.org/perldata.html – msw

risposta

11

Quando trattata come un valore booleano, 0 è considerato un valore falso dal Perl

avete bisogno di qualcosa come

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

EDIT

Si veda anche eccellente commento di rifiuti solidi urbani al domanda originale

+0

Funziona come un incanto, grazie mille! – David

Problemi correlati