Jeffrey Ryan Thalhammer > Perl-Critic-1.117 > Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches

Download:
Perl-Critic-1.117.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

New  61
Open  120
Stalled  4
View/Report Bugs
Module Version: 1.117   Source   Latest Release: Perl-Critic-1.121_01

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

syntax highlighting: