2010-03-10 27 views
6

如果我這樣做:爲什麼我的Perl程序在參數的值爲0時打印幫助消息?

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

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

,並調用這樣的程序:

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

它總是導致調用使用(),所以很明顯的0不能看作是一個整數值。 我能做什麼接受整數值和0?

+4

您的語句「0不被視爲整數值」是正確的,但「0」被解釋爲false:「A s如果非空字符串或數字0(或其字符串等效,「0」),則標量值在布爾意義上被解釋爲TRUE。布爾上下文只是一種特殊類型的標量上下文,不會對字符串或數字進行任何轉換。「Dancrumb的回答是正確的,儘管對錯誤陳述沒有明確的規定。http://perldoc.perl.org/perldata.html – msw 2010-03-10 15:22:31

回答

11

當爲一個布爾處理,0是由Perl的

認爲是假值

你需要像

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

編輯

另請參閱MSW對優秀評論原始問題

+0

作爲魅力工作,非常感謝! – David 2010-03-10 15:17:43

相關問題