Perl::Critic::Policy::RegularExpressions::ProhibitCaptureWithoutTest.3pm

Langue: en

Version: 2009-03-07 (debian - 07/07/09)

Section: 3 (Bibliothèques de fonctions)

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 (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.