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::ProhibitPOSIXimport - don't import the whole of POSIX into a module

Description

       This policy is part of the "Perl::Critic::Pulp" add-on.  It asks you not to "use POSIX" with an import of
       all the symbols from that module if you're only using a few things.

           package Foo;
           use POSIX;    # bad

       The aim is to save some memory, and maybe run a bit faster.  A full "POSIX" import adds about 550 symbols
       to your module and that's about 30 to 40 kbytes in Perl 5.10 on a 32-bit system, or about 115 kbytes in
       Perl 5.8.  If lots of modules do this then it adds up.

       As noted in the "POSIX" module docs, the way it exports everything by default is an historical accident,
       not something to encourage.

   AllowedForms
       A full import is allowed in "package main", which is the top-level of a script etc, since in a script you
       want convenience rather than a bit of memory, at least initially.

           #!/usr/bin/perl
           use POSIX;        # ok

       An import of no symbols is allowed and you then add a "POSIX::" qualifier to each call or constant.
       Qualifiers like this can make it clear where the function is coming from.

           package Foo;
           use POSIX (); # ok

           my $fd = POSIX::dup(0);
           if ($! == POSIX::ENOENT())

       An import of an explicit set of functions and constants is allowed.  This allows short names without the
       memory penalty of a full import.  However it can be error-prone to update the imports with what you
       actually use (see "ProhibitCallsToUndeclaredSubs" for some checking).

           package Foo;
           use POSIX qw(dup ENOENT); # ok
           ...
           my $fd = dup(0);

       A full import is allowed in a module if there's 15 or more calls to "POSIX" module functions.  This rule
       might change or be configurable in the future, but the intention is that a module making heavy use of
       "POSIX" shouldn't be burdened by a "POSIX::" on every call or by maintaining a list of explicit imports.

           package Foo;
           use POSIX;         # ok
           ...
           tzset(); dup(1)... # 15 or more calls to POSIX stuff

   Disabling
       If you don't care this sort of thing you can always disable "ProhibitPOSIXimport" from your .perlcriticrc
       in the usual way (see "CONFIGURATION" in Perl::Critic),

           [-Modules::ProhibitPOSIXimport]

Home Page

Name

       Perl::Critic::Policy::Modules::ProhibitPOSIXimport - don't import the whole of POSIX into a module

See Also

       POSIX, Perl::Critic::Pulp, Perl::Critic, Perl::Critic::Policy::Subroutines::ProhibitCallsToUndeclaredSubs

See Also