Perl::Critic::Policy::ControlStructures::ProhibitPostfixControls - Write if($condition){ do_something() }
instead of do_something() if $condition
.
This Policy is part of the core Perl::Critic distribution.
Conway discourages using postfix control structures (if
, for
,
unless
, until
, while
) because they hide control flow. The
unless
and until
controls are particularly evil because they
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 }
A set of constructs to be ignored by this policy can specified by
giving a value for 'allow' of a string of space-delimited keywords:
if
, for
, unless
, until
, and/or while
. An example of
specifying allowed flow-control structures in a .perlcriticrc file:
[ControlStructures::ProhibitPostfixControls] allow = for if until
By default, all postfix control keywords are prohibited.
The set of flow-control functions that are exempt from the restriction can also be configured with the 'flowcontrol' directive in your .perlcriticrc file:
[ControlStructures::ProhibitPostfixControls] flowcontrol = warn die carp croak cluck confess goto exit
The die
, croak
, and confess
functions are frequently used as
flow-controls just like next
or last
. So this Policy does
permit you to use a postfix if
when the statement begins with one
of those functions. It is also pretty common to use warn
, carp
,
and cluck
with a postfix if
, so those are allowed too.
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.