Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Perl::Critic::Policy::ValuesAndExpressions:: GivenWhenTryCatchLexicalDollarUnderDefaultVarBindingConfusion

by Anonymous Monk
on May 19, 2013 at 19:47 UTC ( #1034243=CUFP: print w/ replies, xml ) Need Help??

Perl::Critic::Policy::ValuesAndExpressions::GivenWhenTryCatchLexicalDollarUnderDefaultVarBindingConfusion

Why? See Yet more Try::Tiny problelms, Lexical $_ in given/when vs. BLOCK arguments

released under the same terms as perl itself just like Perl::Critic::Policy::ValuesAndExpressions::UndefinedBehaviourMaybeQuoteit / $1 not quoted (value not frozen) undefined behaviour

package Perl::Critic::Policy::ValuesAndExpressions::GivenWhenTryCatchL +exicalDollarUnderDefaultVarBindingConfusion; our $VERSION = '0.01'; use strict; use warnings; use Readonly; use parent 'Perl::Critic::Policy'; use Perl::Critic::Utils qw{ :severities }; sub supported_parameters { return () } sub default_severity { return $SEVERITY_MEDIUM } sub default_themes { return qw< bugs maintenance > } sub applies_to { return qw/Statement::When/ } Readonly::Scalar my $DESC => q{lexical $_ from given/when in catch(fro +m Try::Tiny) but you probably wanted global $_, use $::_ instead }; Readonly::Scalar my $EXPL => q{do you want my/lexical $_ or global $_? +}; use PPIx::XPath; use Tree::XPathEngine; sub PPI::Node::xf { my( $node, $query ) = @_; $query = PPIx::XPath->clean_xpath_expr( $query ); $::pxp ||= Tree::XPathEngine->new(); return $::pxp->findnodes( $query, $node ); } sub violates { my ( $self, $elem, undef ) = @_; my $globaldollar = $elem->xf(q{ .//Statement::Variable[ .=~ /\bou +r\b.*?\$_/ ] }); my $catch = $elem->xf(q{ .//Statement/Token::Word[ contain +s(., 'catch' ) ] // following-sibling::Structure::Block[ contains( ., '$_' ) ] }); #~ warn "### globaldollar($globaldollar)#####catch($catch) ### "; if( $catch and not $globaldollar ){ return $self->violation( $DESC, $EXPL, $elem ); } return; } 1; # End of Perl::Critic::Policy::ValuesAndExpressions::GivenWhenTryCa +tchLexicalDollarUnderDefaultVarBindingConfusion

Comment on Perl::Critic::Policy::ValuesAndExpressions:: GivenWhenTryCatchLexicalDollarUnderDefaultVarBindingConfusion
Download Code
Re: Perl::Critic::Policy::ValuesAndExpressions:: GivenWhenTryCatchLexicalDollarUnderDefaultVarBindingConfusion
by Anonymous Monk on May 19, 2013 at 23:21 UTC

    Refinement in the query (a catch without a try? nah ), line number inches closer to reality

    sub violates { my ( $self, $elem, undef ) = @_; my $globaldollar = $elem->xf(q{ //Statement::Variable /Token::Word[.='our'] /following-sibling::Token::Magic[.='$_'] }); my( $catch ) = $elem->xf(q{ .//Statement /Token::Word[ . = 'try' ] /following-sibling::Structure::Block /following-sibling::Token::Word[ . = 'catch' ] /following-sibling::Structure::Block[ contains( ., '$_' ) ] }); if( $catch and not $globaldollar ){ return $self->violation( $DESC, $EXPL, $catch ); } return; }

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: CUFP [id://1034243]
Approved by OfficeLinebacker
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (6)
As of 2015-07-03 04:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (48 votes), past polls