Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Perl::CPerl::Critic::PUseryContributedpPerliDocumentationFixedStringMatches(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)

NAME | AFFILIATION | DESCRIPTION | CONFIGURATION | CREDITS | AUTHOR | COPYRIGHT

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help