Perl::Critic::Policy::ValuesAndExpressions::ProhibitMismatchedOperators(3pm)

Perl::Critic::Policy::ValuesAndExpressions::ProhibitMismatchedOperators3pm

Don't mix numeric operators with string operands, or vice-versa.

Affiliation

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

Overview

Using the wrong operator type for a value can obscure coding intent and possibly lead to subtle errors. An example of this is mixing a string equality operator with a numeric value, or vice-versa.

    if ($foo == 'bar') {}     #not ok
    if ($foo eq 'bar') {}     #ok
    if ($foo eq 123) {}       #not ok
    if ($foo == 123) {}       #ok

Configuration

This Policy is not configurable except for the standard options.

Notes

If warnings are enabled, the Perl interpreter usually warns you about using mismatched operators at run-time. This Policy does essentially the same thing, but at author-time. That way, you can find out about them sooner.

Perl handles the strings 'NaN' and 'inf' as special numbers and creates an NV struct when compared with a numeric operator. Although not necessary it is allowed to write code such as:
my $i = 'inf'+0; This pattern helps others understand that the variable is indeed the Infinite or NaN numbers as Perl interprets them. Only these two special string numbers are allowed to have the '+' operator which would otherwise be allowed only for strings.

Releases

10 releases since Debian 5.0 (Lenny); the text changed 9 times.

  1. 5.0
  2. 6.0
  3. 7
  4. 8
  5. 9
  6. 10
  7. 11
  8. 12
  9. 13
  10. Arch

Author

Peter Guzis <[email protected]>

From perl-perl-critic 1.156-3 in Arch Linux 2026-11-01. Parsed by carta from the page's man source.