logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Perl::Critic::Policy::Modules::RequireExplicitPackage - Always make the "package" explicit.

Affiliation

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

Author

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

Configuration

       As for programs, most people understand that the default package is "main", so this Policy doesn't apply
       to files that begin with a perl shebang.  If you want to require an explicit "package" declaration in all
       files, including programs, then add the following to your .perlcriticrc file

           [Modules::RequireExplicitPackage]
           exempt_scripts = 0

       Some users may find it desirable to exempt the load of specific modules from this policy. For example,
       Perl does not support Unicode module names because of portability problems. Users who are not concerned
       about this and intend to use "UTF-8" module names will need to specify "use utf8;" before the package
       declaration. To do this, add the following to your .perlcriticrc file

           [Modules::RequireExplicitPackage]
           allow_import_of = utf8

       The "allow_import_of" configuration option takes multiple module names, separated by spaces.

Description

       In general, the first statement of any Perl module or library should be a "package" statement.
       Otherwise, all the code that comes before the "package" statement is getting executed in the caller's
       package, and you have no idea who that is.  Good encapsulation and common decency require your module to
       keep its innards to itself.

       There are some valid reasons for not having a "package" statement at all.  But make sure you understand
       them before assuming that you should do it too.

       One of those reasons is having a "use VERSION" line as the first line of your Perl file. It declares
       which version of the Perl language the following code is written. Because the effect is lexical, the
       previous remarks about the caller's package do not apply.

       The maximum number of violations per document for this policy defaults to 1.

Important Changes

       This policy was formerly called "ProhibitUnpackagedCode" which sounded a bit odd.  If you get lots of
       "Cannot load policy module" errors, then you probably need to change "ProhibitUnpackagedCode" to
       "RequireExplicitPackage" in your .perlcriticrc file.

Name

       Perl::Critic::Policy::Modules::RequireExplicitPackage - Always make the "package" explicit.

See Also