Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

perl::critic::policy::regularexpressions::prohibitfixedstringmat(3pm) [debian man page]

Perl::Critic::Policy::RegularExpressions::ProhibitFixedSUsergContributed)Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches(3pm)

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 v5.14.2 2012-Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches(3pm)

Check Out this Related Man Page

Perl::Critic::Policy::RegularExpressions::RequireBracesFUserlContributed PPerl::Critic::Policy::RegularExpressions::RequireBracesForMultiline(3pm)

NAME
Perl::Critic::Policy::RegularExpressions::RequireBracesForMultiline - Use "{" and "}" to delimit multi-line regexps. AFFILIATION
This Policy is part of the core Perl::Critic distribution. DESCRIPTION
Long regular expressions are hard to read. A good practice is to use the "x" modifier and break the regex into multiple lines with comments explaining the parts. But, with the usual "//" delimiters, the beginning and end can be hard to match, especially in a "s///" regexp. Instead, try using "{}" characters to delimit your expressions. Compare these: s/ <a s+ href="([^"]+)"> (.*?) </a> /link=$1, text=$2/xms; vs. s{ <a s+ href="([^"]+)"> (.*?) </a> } {link=$1, text=$2}xms; Is that an improvement? Marginally, but yes. The curly braces lead the eye better. CONFIGURATION
There is one option for this policy, "allow_all_brackets". If this is true, then, in addition to allowing "{}", the other matched pairs of "()", "[]", and "<>" are allowed. 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 v5.14.2 2012-0Perl::Critic::Policy::RegularExpressions::RequireBracesForMultiline(3pm)
Man Page