2010-09-07 74 views
4

我在Perl腳本中使用了Getopt::Std,並且想要傳遞零值作爲值。我正在檢查使用unless()正確設置了這些值。目前unless()拒絕該值爲未設置。將Getopt :: Std傳遞給零

有沒有辦法讓unless()接受零作爲有效值(任何非負整數是有效的)。

這可能很簡單,但我幾天前從來沒有碰過Perl!

豐富

+2

你什麼意思通過「傳遞零值」呢?這是一個命令行選項 - 和''cmd -0''一樣(相當於'xargs -0')?或者作爲getopt :: Std中'getopt'函數的參數之一?正如所寫的,你的問題並不清楚。 – 2010-09-07 15:15:41

+0

對不起,你是對的。我想要'perl myScript -c 0'和'除非($ opt_c)'返回true。 – Rich 2010-09-08 06:36:58

回答

9

您需要使用unless defined <SOMETHING>代替unless <SOMETHING>,因爲零是Perl假的。

3

的Perl 5具有several false values0"0"""undef()

重要的是要注意,有些東西看起來應該是假的,但不是。例如0.0是錯誤的,因爲它的編號相當於0,但"0.0"不是(只有false的字符串是空字符串("")和"0")。

它也有定義的概念。一個具有賦值給它的值(非undef)的變量據說被定義,並且在使用defined函數進行測試時將返回true。

既然你想要一個參數是一個非負整數,它可能是更好的測試是:

unless (defined $value and $value =~ /^[0-9]+$/) { 
    #blah 
} 
相關問題