Perl::Critic::Policy::Variables::RequireLexicalLoopIterators - Write for my $element (@list) {...} instead of for $element (@list) {...}.
for my $element (@list) {...}
for $element (@list) {...}
This Policy is part of the core Perl::Critic distribution.
This policy asks you to use my-style lexical loop iterator variables:
my
foreach my $zed (...) { ... }
Unless you use my, for/foreach loops use a global variable with its value local to the block. In other words,
for
foreach
local
foreach $zed (...) { ... }
is more-or-less equivalent to
{ local $zed foreach $zed (...) { ... } }
This may not seem like a big deal until you see code like
my $bicycle; for $bicycle (@things_attached_to_the_bike_rack) { if ( $bicycle->is_red() and $bicycle->has_baseball_card_in_spokes() and $bicycle->has_bent_kickstand() ) { $bicycle->remove_lock(); last; } } if ( $bicycle and $bicycle->is_unlocked() ) { ride_home($bicycle); }
which is not going to allow you to arrive in time for dinner with your family because the $bicycle outside the loop is not changed by the loop. You may have unlocked your bicycle, but you can't remember which one it was.
$bicycle
Lexical loop variables were introduced in Perl 5.004. This policy does not report violations on code which explicitly specifies an earlier version of Perl (e.g. require 5.002;).
require 5.002;
This Policy is not configurable except for the standard options.
"Foreach Loops" in perlsyn
"my() in Control Structures" in perl5004delta
Jeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Copyright (c) 2005-2011 Imaginative Software Systems. All 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.
To install Perl::Critic, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Perl::Critic
CPAN shell
perl -MCPAN -e shell install Perl::Critic
For more information on module installation, please visit the detailed CPAN module installation guide.