---
name: "Perl::Critic::Policy::BuiltinFunctions::ProhibitBooleanGrep"
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::BuiltinFunctions::ProhibitBooleanGrep"
---

# Perl::Critic::Policy::BuiltinFunctions::ProhibitBooleanGrep(3pm)

Use "any" from "List::Util", "List::SomeUtils", or "List::MoreUtils" instead of "grep" in boolean context.

## NAME

Perl::Critic::Policy::BuiltinFunctions::ProhibitBooleanGrep - Use "any" from "List::Util", "List::SomeUtils", or "List::MoreUtils" instead of "grep" in boolean context.

## AFFILIATION

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

## DESCRIPTION

Using `"grep"` in boolean context is a common idiom for checking if any elements in a list match a condition.  This works because boolean context is a subset of scalar context, and grep returns the number of matches in scalar context.  A non-zero number of matches means a match.

But consider the case of a long array where the first element is a match.  Boolean `"grep"` still checks all of the rest of the elements needlessly.  Instead, a better solution is to use the `"any"` function from either List::Util, List::SomeUtils, or List::MoreUtils. The `"any"` function will return as soon as a successful match is found, rather than processing the entire list. This saves time.

## CONFIGURATION

This Policy is not configurable except for the standard options.

## CAVEATS

The algorithm for detecting boolean context takes a LOT of shortcuts. There are lots of known false negatives.  But, I was conservative in writing this, so I hope there are no false positives.

## AUTHOR

Chris Dolan \<cdolan@cpan.org\>

## CREDITS

Initial development of this policy was supported by a grant from the Perl Foundation.

## COPYRIGHT

Copyright (c) 2007-2021 Chris Dolan.  Many rights reserved.

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.
