我在Perl腳本中使用了Getopt::Std
,並且想要傳遞零值作爲值。我正在檢查使用unless()
正確設置了這些值。目前unless()
拒絕該值爲未設置。將Getopt :: Std傳遞給零
有沒有辦法讓unless()
接受零作爲有效值(任何非負整數是有效的)。
這可能很簡單,但我幾天前從來沒有碰過Perl!
豐富
我在Perl腳本中使用了Getopt::Std
,並且想要傳遞零值作爲值。我正在檢查使用unless()
正確設置了這些值。目前unless()
拒絕該值爲未設置。將Getopt :: Std傳遞給零
有沒有辦法讓unless()
接受零作爲有效值(任何非負整數是有效的)。
這可能很簡單,但我幾天前從來沒有碰過Perl!
豐富
您需要使用unless defined <SOMETHING>
代替unless <SOMETHING>
,因爲零是Perl假的。
的Perl 5具有several false values:0
,"0"
,""
,undef
,()
。
重要的是要注意,有些東西看起來應該是假的,但不是。例如0.0
是錯誤的,因爲它的編號相當於0
,但"0.0"
不是(只有false的字符串是空字符串(""
)和"0"
)。
它也有定義的概念。一個具有賦值給它的值(非undef)的變量據說被定義,並且在使用defined
函數進行測試時將返回true。
既然你想要一個參數是一個非負整數,它可能是更好的測試是:
unless (defined $value and $value =~ /^[0-9]+$/) {
#blah
}
你什麼意思通過「傳遞零值」呢?這是一個命令行選項 - 和''cmd -0''一樣(相當於'xargs -0')?或者作爲getopt :: Std中'getopt'函數的參數之一?正如所寫的,你的問題並不清楚。 – 2010-09-07 15:15:41
對不起,你是對的。我想要'perl myScript -c 0'和'除非($ opt_c)'返回true。 – Rich 2010-09-08 06:36:58