NAME

Perl::Critic::Policy::ControlStructures::ProhibitPostfixControls

DESCRIPTION

Conway discourages using postfix control structures (if, for, unless, until, while). The unless and until controls are particularly evil becuase the lead to double-negatives that are hard to comprehend. The only tolerable usage of a postfix if is when it follows a loop break such as last, next, redo, or continue.

 do_something() if $condition;         #not ok
 if($condition){ do_something() }      #ok

 do_something() while $condition;      #not ok
 while($condition){ do_something() }   #ok

 do_something() unless $condition;     #not ok
 do_something() unless ! $condition;   #really bad
 if(! $condition){ do_something() }    #ok

 do_something() until $condition;      #not ok
 do_something() until ! $condition;    #really bad
 while(! $condition){ do_something() } #ok 

 do_something($_) for @list;           #not ok

LOOP:
 for my $n (0..100){
     next if $condition;               #ok
     last LOOP if $other_condition;    #also ok
 }

CONSTRUCTOR

This policy accepts an additional key-value pair in the new method. The key should be 'allow' and the value should be a reference to an array of postfix control keywords that you want to allow. Alternatively, the value can be a string of space-delimited keywords. Choose from if, for, unless, until,and while. When using the Perl::Critic engine, these can be configured in the .perlcriticrc file like this:

[ControlStructures::ProhibitPostfixControls]
allow = for if

#or 

[ControlStructures::ProhibitPostfixControls]
allow = for
allow = if

By default, all postfix control keywords are prohibited.

AUTHOR

Jeffrey Ryan Thalhammer <thaljef@cpan.org>

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