<p>This snippet of Perl code in my program is giving the wrong result.</p>

<pre><code>$condition ? $a = 2 : $a = 3 ;
print $a;
</code></pre>

<p>No matter what the value of <code>$condition</code> is, the output is always 3, how come?</p>

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.