|
NAMEPerl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches - Use "eq" or hash instead of fixed-pattern regexps.AFFILIATIONThis Policy is part of the core Perl::Critic distribution.DESCRIPTIONA 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. VARIANTSThis 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. CONFIGURATIONThis Policy is not configurable except for the standard options.CREDITSInitial development of this policy was supported by a grant from the Perl Foundation.AUTHORChris Dolan <cdolan@cpan.org>COPYRIGHTCopyright (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
Visit the GSP FreeBSD Man Page Interface. |