Assignment inside Perl ternary conditional operator problems

前端 未结 5 1608
一生所求
一生所求 2021-02-05 00:57

This snippet of Perl code in my program is giving the wrong result.

$condition ? $a = 2 : $a = 3 ;
print $a;

No matter what the value of

5条回答
  •  佛祖请我去吃肉
    2021-02-05 01:02

    This is explained in the Perl documentation.

    Because of Perl operator precedence the statement is being parsed as

    ($condition ? $a= 2 : $a ) = 3 ;
    

    Because the ?: operator produces an assignable result, 3 is assigned to the result of the condition.

    When $condition is true this means ($a=2)=3 giving $a=3

    When $condition is false this means ($a)=3 giving $a=3

    The correct way to write this is

    $a = ( $condition ? 2 : 3 );
    print $a;
    

    We got bitten by this at work, so I am posting here hoping others will find it useful.

提交回复
热议问题