|
NAMEPerl::Critic::Policy::ValuesAndExpressions::ProhibitNullStatements - disallow empty statements (stray semicolons)DESCRIPTIONThis policy is part of the "Perl::Critic::Pulp" add-on. It prohibits empty statements, ie. bare ";" semicolons. This can be a typo doubling up a semi likeuse Foo;; # bad Or a stray left at the end of a control structure like if ($foo) { print "foo\n"; return; }; # bad An empty statement is harmless, so this policy is under the "cosmetic" theme (see "POLICY THEMES" in Perl::Critic) and medium severity. It's surprisingly easy to leave a semi behind when chopping code around, especially when changing a statement to a loop or conditional. Allowed formsA C style "for (;;) { ...}" loop is ok. Those semicolons are expression separators and empties there are quite usual.for (;;) { # ok print "infinite loop\n"; } A semicolon at the start of a "map" or "grep" block is allowed. It's commonly used to ensure Perl parses it as a block, not an anonymous hash. (Perl decides at the point it parses the "{". A ";" there forces a block when it might otherwise guess wrongly. See "map" in perlfunc for more on this.) map {; $_, 123} @some_list; # ok grep {# this is a block ; # ok length $_ and $something } @some_list; The "map" form is much more common than the "grep", but both suffer the same ambiguity. "grep" doesn't normally inspire people to quite such convoluted forms as "map" does. Try/Catch BlocksThe "Try", "TryCatch" and "Syntax::Feature::Try" modules all add new "try" block statement forms. These statements don't require a terminating semicolon (the same as an "if" doesn't require one). Any semicolon there is reckoned as a null statement.use TryCatch; sub foo { try { attempt_something() } catch { error_recovery() }; # bad } This doesn't apply to other try modules such as "Try::Tiny" and friends. They're implemented as ordinary function calls (with prototypes), so a terminating semicolon is normal for them. use Try::Tiny; sub foo { try { attempt_something() } catch { error_recovery() }; # ok } CONFIGURATION
SEE ALSOPerl::Critic::Pulp, Perl::Critic, Perl::Critic::Policy::CodeLayout::RequireFinalSemicolonHOME PAGEhttp://user42.tuxfamily.org/perl-critic-pulp/index.htmlCOPYRIGHTCopyright 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019, 2021 Kevin RydePerl-Critic-Pulp is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Perl-Critic-Pulp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Perl-Critic-Pulp. If not, see <http://www.gnu.org/licenses/>.
Visit the GSP FreeBSD Man Page Interface. |