/usr/local/perl/lib/site_perl/5.8.5/Perl/Critic/Policy/Variables/RequireLexicalLoopIterators.pm



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.

 /usr/local/perl/lib/site_perl/5.8.5/Perl/Critic/Policy/Variables/RequireLexicalLoopIterators.pm