manpagez: man pages & more
man Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches(3)
Home | html | info | man
Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches(3)



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 v5Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches(3)

perl-critic 1.134.0 - Generated Tue Jun 4 14:14:19 CDT 2019
© manpagez.com 2000-2024
Individual documents may contain additional copyright information.