Perl::Critic::Policy::Modules::ProhibitConditionalUseStatements3pm
Avoid putting conditional logic around compile-time includes.
Affiliation
This Policy is part of the core Perl::Critic distribution.
Overview
Modules included via "use" are loaded at compile-time. Placing conditional logic around the "use" statement has no effect on whether the module will be loaded. Doing so can also serve to confuse the reader as to the author's original intent.
If you need to conditionally load a module you should be using "require" instead.
This policy will catch the following forms of conditional "use" statements:
# if-elsif-elseif ($a == 1) { use Module; }if ($a == 1) { } elsif ($a == 2) { use Module; }if ($a == 1) { } else { use Module; }# for/foreachfor (1..$a) { use Module; }foreach (@a) { use Module; }# whilewhile ($a == 1) { use Module; }# unlessunless ($a == 1) { use Module; }# untiluntil ($a == 1) { use Module; }# do-conditiondo { use Module; } if $a == 1;do { use Module; } while $a == 1;do { use Module; } unless $a == 1;do { use Module; } until $a == 1;# operator-do$a == 1 || do { use Module; };$a == 1 && do { use Module; };$a == 1 or do { use Module; };$a == 1 and do { use Module; };# non-string evaleval { use Module; };
Including a module via "use" in bare blocks, standalone do blocks, or string evals is allowed.
# bare block{ use Module; }# dodo { use Module; }# string evaleval "use Module";
Configuration
This Policy is not configurable except for the standard options.
Releases
8 releases since Debian 7 (Wheezy); the text changed 7 times.