变量的条件初始化/定义

问题描述:

仅当参数为假时才可以定义变量吗?
我有类似:变量的条件初始化/定义

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

该语法是...... fraught with peril

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

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

是更安全的替代方案。