NAME
Perl::Critic::Policy::Variables::RequireLexicalLoopIterators
DESCRIPTION
for
/foreach
loops always create new lexical variables for named iterators. In other words
for $zed (...) {
...
}
is equivalent to
for my $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 different from the $bicycle
inside the loop. You may have freed your bicycle, but you can't remember which one it was.
AUTHOR
Jeffrey Ryan Thalhammer <thaljef@cpan.org>
COPYRIGHT
Copyright (c) 2005-2007 Jeffrey Ryan Thalhammer. 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.