Manpage logo

Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches - Use 'eq' or hash instead of fixed-pattern regexps.

NAME  AFFILIATION  DESCRIPTION  VARIANTS  CONFIGURATION  CREDITS  AUTHOR  COPYRIGHT 

NAME

Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches − Use "eq" or hash instead of fixed−pattern regexps.

AFFILIATION

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

DESCRIPTION

A regular expression that matches just a fixed set of constant strings is wasteful of performance and is hard on maintainers. It is much more readable and often faster to use "eq" or a hash to match such strings.

# Bad
my $is_file_function = $token =˜ m/\A (?: open | close | read ) \z/xms;
# Faster and more readable
my $is_file_function = $token eq 'open' ||
$token eq 'close' ||
$token eq 'read';

For larger numbers of strings, a hash is superior:

# Bad
my $is_perl_keyword =
$token =˜ m/\A (?: chomp | chop | chr | crypt | hex | index
lc | lcfirst | length | oct | ord | ... ) \z/xms;
# Better
Readonly::Hash my %PERL_KEYWORDS => map {$_ => 1} qw(
chomp chop chr crypt hex index lc lcfirst length oct ord ...
);
my $is_perl_keyword = $PERL_KEYWORD{$token};

Conway also suggests using lc() instead of a case−insensitive match.

VARIANTS

This policy detects both grouped and non−grouped strings. The grouping may or may not be capturing. The grouped body may or may not be alternating. "\A" and "\z" are always considered anchoring which "ˆ" and "$" are considered anchoring is the "m" regexp option is not in use. Thus, all of these are violations:

m/ˆfoo$/;
m/\A foo \z/x;
m/\A foo \z/xm;
m/\A(foo)\z/;
m/\A(?:foo)\z/;
m/\A(foo|bar)\z/;
m/\A(?:foo|bar)\z/;

Furthermore, this policy detects violations in "m//", "s///" and "qr//" constructs, as you would expect.

CONFIGURATION

This Policy is not configurable except for the standard options.

CREDITS

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

AUTHOR

Chris Dolan <[email protected]>

COPYRIGHT

Copyright (c) 2007−2023 Chris Dolan

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


Updated 2026-06-01 - jenkler.se | uex.se