It is true that the trinary operator can be used as an lvalue. On the other hand, I can't think of a legitimate reason why one would want to do so (although I'm open to suggestions).
As a first approximation, I think the expression is better written as
if( $flag ) { $on = $value; } else { $off = $value; }
Then again, the repeated assignments of the same value does look a little redundant. This could be recast as
${$flag ? \$on : \$off} = $value;
Which, not coincidentally, looks remarkably similar to the problem of pushing to the correct array, and to my twisted mind, seems a bit easier to follow than the initial code. The fact that the code looks weird alerts you to the fact that something weird is indeed going on.
But I digress. I posited that one should never use the ternary operator as an lvalue. When I see code that does this, it is usually a degenerate (in more ways than one) form of a hash. I would probably recast the two scalars as keys of a hash, which would give something like:
$status{$flag ? 'on' : 'off'} = $value;
That, to me, looks the clearest of all.
In reply to Re: Trinary operator can't be used as first argument of push
by grinder
in thread Ternary operator can't be used as first argument of push
by davido
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |