Perl::...ntrols(3pm)
okay bestie, this is Perl::...ntrols(3pm) from User Contributed Perl Documentation β the Perl::Critic policy page that's about to make your postfix ifs think twice π
β¨
β¨ NAME β¨
Perl::Critic::Policy::ControlStructures::ProhibitPostfixControls is the policy, and its whole vibe is: write if($condition){ do_something() } instead of do_something() if $condition. π
π¦ AFFILIATION π¦
This Policy is part of the core Perl::Critic distribution. slay.
π DESCRIPTION π
Conway discourages using postfix control structures (if, for, unless, until, when, 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/when 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
next when m< 0 \z >xms; # fine too
}
π CONFIGURATION π
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, when, and/or while. Here's 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
This is useful if you're using additional modules that add things like assert or throw. π
π§ NOTES π§
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. π
The when keyword was added to the language after Perl Best Practices was written. This policy treats when the same way it does if, i.e. it's allowed after flow-control constructs. Thanks to brian d foy for the inspiration http://www.effectiveperlprogramming.com/blog/543. π¦
π BUGS π
Look for the do {} while case and change the explanation to point to page 123 when it is found. RT #37905. π
π AUTHOR π
Jeffrey Ryan Thalhammer <jeff@imaginative-software.com> β iconic.
πΈ COPYRIGHT πΈ
Copyright (c) 2005-2011 Imaginative Software Systems. 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. π
okay, that's the whole page, bestie π this one is from perl v5.42.0, dated 2024-10-23, and the manual name is Perl::...ntrols(3pm) β periodt β¨
π¦ where this page comes from
- opensuse-leap 16.0: perl-Perl-Critic 1.156.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms