---
name: "Perl::Critic::Policy::ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions"
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::ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions"
---

# Perl::Critic::Policy::ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions(3pm)

Don't use operators like "not", "!~", and "le" within "until" and "unless".

## NAME

Perl::Critic::Policy::ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions - Don't use operators like "not", "!~", and "le" within "until" and "unless".

## AFFILIATION

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

## DESCRIPTION

```
    until ($foo ne 'blah') {          #not ok
        ...
    }
    while ($foo eq 'blah') {          #ok
        ...
    }
```

A number of people have problems figuring out the meaning of doubly negated expressions.  `"unless"` and `"until"` are both negative constructs, so any negative (e.g. `"!~"`) or reversible operators (e.g. `"le"`) included in their conditional expressions are double negations. Conway considers the following operators to be difficult to understand within `"unless"` and `"until"`:

```
  ! not
  !~ ne !=
  <   >   <=  >=  <=>
  lt  gt  le  ge  cmp
```

## CONFIGURATION

This Policy is not configurable except for the standard options.

## SEE ALSO

Perl::Critic::Policy::ControlStructures::ProhibitUnlessBlocks

## AUTHOR

Elliot Shank `"<perl@galumph.com>"`

## COPYRIGHT

Copyright (c) 2007-2023 Elliot Shank

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.
