On Friday 11 January 2008 16:16:27 Zembower, Kevin wrote:
> When I execute this line:
>
> $type eq "unknown" ? $type="human" : $type="both";
>
> $type is always "both". But executing this line:
>
> if ($type eq "unknown") {$type="human"} else {$type="both"};
>
> $type is "human", which is want I want and expect. The context for these
> statements in my program is pasted in at the bottom.
>
> Thanks for your guidance.
>
> -Kevin
The ?: operator is called the "ternary" operator. The result of the following
line differs from what you expect because of the relative precedences of the
ternary operator and the assignment operator.
$type eq "unknown" ? $type="human" : $type="both";
From `perdoc perlop`:
Because this operator produces an assignable result, using assignments
without parentheses will get you in trouble. For example, this:
$a % 2 ? $a += 10 : $a += 2
Really means this:
(($a % 2) ? ($a += 10) : $a) += 2
Rather than this:
($a % 2) ? ($a += 10) : ($a += 2)
Stephen Kratzer
Network Engineer II
CTI Networks, Inc.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/