2017-10-12 131 views
1

僅當參數爲假時纔可以定義變量嗎?
我有類似:變量的條件初始化/定義

my $object = Class::create($args); 
for my $i (@input) { 
    if ($test) { 
    # print some info here  
    next; 
    } 

#use of $object here  
} 

如果我做這樣的事情:

my $object = Class::create($args) unless ($test); 

是用於初始化一個正確的做法?

+0

'my $ object =!$ test && Class :: create($ args);' –

+0

@Сухой27:老實說,很難理解到底發生了什麼(至少對我來說) – Jim

+1

@Jim'在Perl中&&'(和'和')短路_並返回value_(不是真/假)。所以如果'!$ test'返回一個falsey值(代碼中的標準),那麼語句的其餘部分就不會被評估,並且'!$ test'的返回被賦值給'$ object'(推測爲'undef', emtpy字符串等 - 取決於你的'$ test'是如何設計的)。但是,如果'!$ test'返回一個真值,那麼剩下的就是。這從你的例子中正確地實現了6行。請注意,怪物的答案具有將'$ object'專門設置爲'undef'(並且不依賴於'!$ test'返回)的優點。 – zdim

回答

5

該語法是...... fraught with peril

my $object = $test ? undef : Class::create($args); 

my $object; 
$object = Class::create($args) unless $test; 

是更安全的替代方案。