---
name: "Perl::Critic::Policy::Modules::ProhibitEvilModules"
section: "3pm"
platform: "linux"
package: "perl-perl-critic"
version: "1.156-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Perl::Critic::Policy::Modules::ProhibitEvilModules"
---

# Perl::Critic::Policy::Modules::ProhibitEvilModules(3pm)

Ban modules that aren't blessed by your shop.

## NAME

Perl::Critic::Policy::Modules::ProhibitEvilModules - Ban modules that aren't blessed by your shop.

## AFFILIATION

This Policy is part of the core Perl::Critic distribution.

## DESCRIPTION

Use this policy if you wish to prohibit the use of specific modules. These may be modules that you feel are deprecated, buggy, unsupported, insecure, or just don't like.

## CONFIGURATION

The set of prohibited modules is configurable via the `"modules"` and `"modules_file"` options.

The value of `"modules"` should be a string of space-delimited, fully qualified module names and/or regular expressions.  An example of prohibiting two specific modules in a *.perlcriticrc* file:

```
    [Modules::ProhibitEvilModules]
    modules = Getopt::Std Autoload
```

Regular expressions are identified by values beginning and ending with slashes.  Any module with a name that matches `"m/pattern/"` will be forbidden.  For example:

```
    [Modules::ProhibitEvilModules]
    modules = /Acme::/
```

would cause all modules that match `"m/Acme::/"` to be forbidden.

In addition, you can override the default message ("Prohibited module "*module*" used") with your own, in order to give suggestions for alternative action.  To do so, put your message in curly braces after the module name or regular expression.  Like this:

```
    [Modules::ProhibitEvilModules]
    modules = Fatal {Found use of Fatal. Use autodie instead} /Acme::/ {We don't use joke modules}
```

Similarly, the `"modules_file"` option gives the name of a file containing specifications for prohibited modules.  Only one module specification is allowed per line and comments start with an octothorp and run to end of line; no curly braces are necessary for delimiting messages:

```
    Evil     # Prohibit the "Evil" module and use the default message.
    # Prohibit the "Fatal" module and give a replacement message.
    Fatal Found use of Fatal. Use autodie instead.
    # Use a regular expression.
    /Acme::/     We don't use joke modules.
```

By default, the modules that have been deprecated by the Perl 5 Porters are reported; at the time of writing these are Class::ISA, Pod::Plainer, Shell, and Switch. Specifying a value for the `"modules"` option will override this.

## NOTES

Note that this policy doesn't apply to pragmas.

## AUTHOR

Jeffrey Ryan Thalhammer \<jeff@imaginative-software.com\>

## COPYRIGHT

Copyright (c) 2005-2023 Imaginative Software Systems

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.
