Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

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

Perl::Critic::Policy::RegularExpressions::ProhibitUnusedUseruContributed Perl Perl::Critic::Policy::RegularExpressions::ProhibitUnusedCapture(3pm)

NAME
Perl::Critic::Policy::RegularExpressions::ProhibitUnusedCapture - Only use a capturing group if you plan to use the captured value. AFFILIATION
This Policy is part of the core Perl::Critic distribution. DESCRIPTION
Perl regular expressions have multiple types of grouping syntax. The basic parentheses (e.g. "m/(foo)/") captures into the magic variable $1. Non-capturing groups (e.g. "m/(?:foo)/" are useful because they have better runtime performance and do not copy strings to the magic global capture variables. It's also easier on the maintenance programmer if you consistently use capturing vs. non-capturing groups, because that programmer can tell more easily which regexps can be refactored without breaking surrounding code which may use the captured values. CONFIGURATION
This Policy is not configurable except for the standard options. CAVEATS
"qr//" interpolation This policy can be confused by interpolation of "qr//" elements, but those are always false negatives. For example: my $foo_re = qr/(foo)/; my ($foo) = m/$foo_re (bar)/x; A human can tell that this should be a violation because there are two captures but only the first capture is used, not the second. The policy only notices that there is one capture in the regexp and remains happy. "@-", "@+", $LAST_MATCH_START and $LAST_MATCH_END This policy will only recognize capture groups referred to by these variables if the use is subscripted by a literal integer. $^N and $LAST_SUBMATCH_RESULT This policy will not recognize capture groups referred to only by these variables, because there is in general no way by static analysis to determine which capture group is referred to. For example, m/ (?: (A[[:alpha:]]+) | (Nd+) ) (?{$foo=$^N}) /smx makes use of the first capture group if it matches, or the second capture group if the first does not match but the second does. 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-06-07Perl::Critic::Policy::RegularExpressions::ProhibitUnusedCapture(3pm)

Check Out this Related Man Page

Perl::Critic::Policy::RegularExpressions::ProhibitCapturUserhContributed)Perl::Critic::Policy::RegularExpressions::ProhibitCaptureWithoutTest(3pm)

NAME
Perl::Critic::Policy::RegularExpressions::ProhibitCaptureWithoutTest - Capture variable used outside conditional. AFFILIATION
This Policy is part of the core Perl::Critic distribution. DESCRIPTION
If a regexp match fails, then any capture variables ($1, $2, ...) will be undefined. Therefore it's important to check the return value of a match before using those variables. This policy checks that the previous regexp for which the capture variable is in-scope is either in a conditional or causes an exception or other control transfer (i.e. "next", "last", "redo", "return", or sometimes "goto") if the match fails. A "goto" is only accepted by this policy if it is a co-routine call (i.e. "goto &foo") or a "goto LABEL" where the label does not fall between the "goto" and the capture variable in the scope of the "goto". A computed "goto" (i.e. something like "goto (qw{foo bar baz})[$i]") is not accepted by this policy because its target can not be statically determined. This policy does not check whether that conditional is actually testing a regexp result, nor does it check whether a regexp actually has a capture in it. Those checks are too hard. This policy also does not check arbitrarily complex conditionals guarding regexp results, for pretty much the same reason. Simple things like m/(foo)/ or die "No foo!"; die "No foo!" unless m/(foo)/; will be handled, but something like m/(foo) or do { ... lots of complicated calculations here ... die "No foo!"; }; are beyond its scope. CONFIGURATION
By default, this policy considers "die", "croak", and "confess" to throw exceptions. If you have additional subroutines or methods that may be used in lieu of one of these, you can configure them in your perlcriticrc as follows: [RegularExpressions::ProhibitCaptureWithoutTest] exception_source = my_exception_generator BUGS
This policy does not recognize named capture variables. Yet. AUTHOR
Chris Dolan <cdolan@cpan.org> COPYRIGHT
Copyright (c) 2006-2011 Chris Dolan. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. perl v5.14.2 2012-Perl::Critic::Policy::RegularExpressions::ProhibitCaptureWithoutTest(3pm)
Man Page