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 capture variables are inside a conditional and do not follow an regexps.

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.

CONFIGURATION

This Policy is not configurable except for the standard options.

BUGS

Needs to allow this construct:

for ( ... ) {
    next unless /(....)/;
    if ( $1 ) {
        ....
    }
}

Right now, Perl::Critic thinks that the $1 isn't legal to use because it's "outside" of the match. The thing is, we can only get to the if if the regex matched.

while ( $str =~ /(expression)/ )

AUTHOR

Chris Dolan <cdolan@cpan.org>

COPYRIGHT

Copyright (c) 2006-2009 Chris Dolan.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.