2014-02-14 126 views
0

假設是:如果語句condtion減少

... 
use Config::Properties::Simple; 
... 
my $p = Config::Properties::Simple->new(file => $propfile); 
... 
$str = $p->getProperty('prop'); 
... 

是否

... 
if (defined $str and $str ne "") { #1 
... 

等於

... 
if ($str) { #2 
... 

如果沒有,有沒有辦法簡化#1顯着的聲明?

+0

'如果(($海峽//「 ')ne''){...}' –

+0

是的,這些都是平等的。而且,你怎麼能簡化#2? – Axeman

+1

這是合乎邏輯假,如果不確定的「」和0。有一個在指數符號,這是一個邏輯真0E0,零有趣的特殊情況。 – ddoxey

回答

4

不,他們是不一樣的,如果$str"0"

您可以通過只檢查長度簡化聲明:

if (length $str) { ... 

在最近版本的Perl,length(undef)undef沒有任何警告產生。並且使用undef作爲布爾值也不會生成警告。

(所謂「近期」我的意思是5.12 and up。此前,length(undef)會產生「未初始化值的長度用」如果你有警告開啓,你應該。)

3
  1. 號這對$str=0;$str="0";對於初學者不同。

  2. 也許吧。要看什麼樣的價值觀$str可以有,你正在檢查,並要支持什麼版本的Perl。可能性:

    • if ($str)
    • if (length($str))
    • if (defined($str))