++ed by:
ADAMJS ARJONES ARPI AYOUNG AZAWAWI

38 PAUSE user(s)
22 non-PAUSE user(s).

Jeffrey Ryan Thalhammer

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




Hosting generously
sponsored by Bytemark