1package Perl::Critic::Policy::ControlStructures::ProhibitCStyleForLoops; 2 3use 5.006001; 4use strict; 5use warnings; 6use Readonly; 7 8use Perl::Critic::Utils qw{ :characters :severities }; 9use base 'Perl::Critic::Policy'; 10 11our $VERSION = '1.140'; 12 13#----------------------------------------------------------------------------- 14 15Readonly::Scalar my $DESC => q{C-style "for" loop used}; 16Readonly::Scalar my $EXPL => [ 100 ]; 17 18#----------------------------------------------------------------------------- 19 20sub supported_parameters { return () } 21sub default_severity { return $SEVERITY_LOW } 22sub default_themes { return qw( core pbp maintenance ) } 23sub applies_to { return 'PPI::Structure::For' } 24 25#----------------------------------------------------------------------------- 26 27sub violates { 28 my ( $self, $elem, undef ) = @_; 29 30 if ( _is_cstyle($elem) ) { 31 return $self->violation( $DESC, $EXPL, $elem ); 32 } 33 return; #ok! 34} 35 36sub _is_cstyle { 37 my $elem = shift; 38 my $nodes_ref = $elem->find('PPI::Token::Structure'); 39 return if !$nodes_ref; 40 my @semis = grep { $_ eq $SCOLON } @{$nodes_ref}; 41 return scalar @semis == 2; 42} 43 441; 45 46__END__ 47 48#----------------------------------------------------------------------------- 49 50=pod 51 52=head1 NAME 53 54Perl::Critic::Policy::ControlStructures::ProhibitCStyleForLoops - Write C<for(0..20)> instead of C<for($i=0; $i<=20; $i++)>. 55 56=head1 AFFILIATION 57 58This Policy is part of the core L<Perl::Critic|Perl::Critic> 59distribution. 60 61 62=head1 DESCRIPTION 63 64The 3-part C<for> loop that Perl inherits from C is butt-ugly, and 65only really necessary if you need irregular counting. The very 66Perlish C<..> operator is much more elegant and readable. 67 68 for($i=0; $i<=$max; $i++){ #ick! 69 do_something($i); 70 } 71 72 for(0..$max){ #very nice 73 do_something($_); 74 } 75 76 77=head1 CONFIGURATION 78 79This Policy is not configurable except for the standard options. 80 81 82=head1 AUTHOR 83 84Jeffrey Ryan Thalhammer <jeff@imaginative-software.com> 85 86=head1 COPYRIGHT 87 88Copyright (c) 2005-2011 Imaginative Software Systems. All rights reserved. 89 90This program is free software; you can redistribute it and/or modify 91it under the same terms as Perl itself. The full text of this license 92can be found in the LICENSE file included with this module. 93 94=cut 95 96# Local Variables: 97# mode: cperl 98# cperl-indent-level: 4 99# fill-column: 78 100# indent-tabs-mode: nil 101# c-indentation-style: bsd 102# End: 103# ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround : 104