Re: Multiple numeric not or compare in if statement

by kcott (Bishop)
 on Jul 02, 2020 at 05:42 UTC Need Help??

G'day RedJeep,

There's short-circuiting occurring which I think may be throwing you. (77 is not equal to 3) is TRUE; so, when \$a is 77, (\$a != 3) is TRUE. Having found a TRUE condition, there's no need to evaluate the other ORed conditions (so Perl doesn't).

Changing your Option Not Equal condition to completely negate the Option Equal condition will do what I think you want:

```\$ perl -E '\$a = 77; if ((\$a == 3) || (\$a == 77) || (\$a == 8)) { say "i
+s" } else { say "not" }'
is

\$ perl -E '\$a = 77; if (!((\$a == 3) || (\$a == 77) || (\$a == 8))) { say
+ "not" } else { say "is" }'
is

You can run that rather complicated condition through B::Deparse to find a simpler way of expressing it.

```\$ perl -MO=Deparse -e '(!((\$a != 3) || (\$a != 77) || (\$a != 8)))'
not \$a != 3 || \$a != 77 || \$a != 8;
-e syntax OK

\$ perl -E '\$a = 77; if (not \$a != 3 || \$a != 77 || \$a != 8) { say "not
+" } else { say "is" }'
is

If it helps you, perlop has an "Operator Precedence and Associativity" section.

— Ken

Create A New User
Node Status?
node history
Node Type: note [id://11118792]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2020-08-10 16:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Which rocket would you take to Mars?

Results (58 votes). Check out past polls.

Notices?