Provided by: libperl-critic-freenode-perl_0.028-1_all bug

NAME

       Perl::Critic::Policy::Freenode::WhileDiamondDefaultAssignment - Don't use while with
       implicit assignment to $_

DESCRIPTION

       The diamond operator "<>" (or "<<>>"), and functions "readline()", "readdir()", and
       "each()" are extra magical in a while condition: if it is the only thing in the condition,
       it will assign its result to $_, but it does not localize $_ to the while loop. (Note,
       this also applies to a "for (;<>;)" construct.) This can unintentionally confuse outer
       loops that are already using $_ to iterate. In addition, using $_ at all means that your
       loop can get confused by other code which does not politely localize its usage of the
       global variable. To avoid these possibilities, assign the result of the diamond operator
       or these functions to an explicit lexical variable.

         while (<$fh>) { ... }                   # not ok
         while (<<>>) { ... }                    # not ok
         ... while <STDIN>;                      # not ok
         for (;<>;) { ... }                      # not ok
         while (readline $fh) { ... }            # not ok
         while (readdir $dh) { ... }             # not ok

         while (my $line = <$fh>) { ... }        # ok
         while (my $line = <<>>) { ... }         # ok
         ... while $line = <STDIN>;              # ok
         for (;my $line = <>;) { ... }           # ok
         while (my $line = readline $fh) { ... } # ok
         while (my $dir = readdir $dh) { ... }   # ok

AFFILIATION

       This policy is part of Perl::Critic::Freenode.

CONFIGURATION

       This policy is not configurable except for the standard options.

AUTHOR

       Dan Book, "dbook@cpan.org"

COPYRIGHT AND LICENSE

       Copyright 2015, Dan Book.

       This library is free software; you may redistribute it and/or modify it under the terms of
       the Artistic License version 2.0.

SEE ALSO

       Perl::Critic

perl v5.28.1                   Perl::Critic::Policy::Freenode::WhileDiamondDefaultAssignment(3pm)