当test()
子例程返回true时,我只是尝试在三元运算符的'true'部分中递增一个值,但当它返回false时将其设置回零。
我不明白为什么以下代码不起作用:
use warnings;
use strict;
my $int = 5;
test() ? $int += 1 : $int = 0;
print "$int\n"; # => prints "0"
sub test {
return 1; #return true
}
答案 0 :(得分:2)
答案很简单:perl ternary operator可分配
特别是,您的代码实际上意味着:
(test() ? $int += 1 : $int) = 0;
您可能还记得,分配的结果是分配给的变量;这意味着会发生以下情况:
此代码将按您的要求运行:
test() ? ($int++) : ($int = 0);
或者这个:
$int += test() ? 1 : -$int; #If you want to be cute