Perl Diver 2.31
Main Environment Variables Perl Default Values Perl Config - Summary Perl Config - Full Installed Modules List Directory uptime Docs

Module Documentation
Details and documentation about a specific module, including version and documentation (if available). Note that while links to perldoc.com and search.cpan.org are provided, the module may be part of a larger distribution. If you reach a File Not Found page on either site, please try the parent module.

Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches

Name Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches
Version 1.134
Located at /usr/share/perl5/vendor_perl
File /usr/share/perl5/vendor_perl/Perl/Critic/Policy/RegularExpressions/ProhibitFixedStringMatches.pm
Is Core No
Search CPAN for this module Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches
Documentation Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches
Module Details Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches


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 <cdolan@cpan.org>


COPYRIGHT

Copyright (c) 2007-2011 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

Perl Diver brought to you by ScriptSolutions.com © 1997- 2025