Perl - 三元运算符中的增量值

时间:2013-11-19 22:44:14

标签: perl increment ternary-operator

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
}

1 个答案:

答案 0 :(得分:2)

答案很简单:perl ternary operator可分配

特别是,您的代码实际上意味着:

(test() ? $int += 1 : $int) = 0;

您可能还记得,分配的结果是分配给的变量;这意味着会发生以下情况:

  1. test()评估为true
  2. 评估
  3. $ int + = 1,将$ int递增到6
  4. 分配的结果$ int被赋值为0
  5. 此代码将按您的要求运行:

    test() ? ($int++) : ($int = 0);
    

    或者这个:

    $int += test() ? 1 : -$int; #If you want to be cute