Perl::Critic::Policy::Variables::RequireLexicalLoopIterators.3pm

Langue: en

Version: 2008-03-08 (mandriva - 01/05/08)

Section: 3 (Bibliothèques de fonctions)

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 (c) 2005-2008 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.