---
name: "Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators"
section: "3pm"
platform: "linux"
package: "perl-perl-critic"
version: "1.156-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators"
---

# Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators(3pm)

Write " !$foo && $bar \|\| $baz " instead of " not $foo && $bar or $baz".

## NAME

Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators - Write " !$foo && $bar \|\| $baz " instead of " not $foo && $bar or $baz".

## AFFILIATION

This Policy is part of the core Perl::Critic distribution.

## DESCRIPTION

Conway advises against combining the low-precedence booleans ( `"and` `or not"` ) with the high-precedence boolean operators ( `"&& || !"` ) in the same expression.  Unless you fully understand the differences between the high and low-precedence operators, it is easy to misinterpret expressions that use both.  And even if you do understand them, it is not always clear if the author actually intended it.

```
    next if not $foo || $bar;  #not ok
    next if !$foo || $bar;     #ok
    next if !( $foo || $bar ); #ok
```

## CONFIGURATION

This Policy is not configurable except for the standard options.

## AUTHOR

Jeffrey Ryan Thalhammer \<jeff@imaginative-software.com\>

## COPYRIGHT

Copyright (c) 2005-2023 Imaginative Software Systems

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.  The full text of this license can be found in the LICENSE file included with this module.
