Provided by: libperl-critic-pulp-perl_99-1_all bug

NAME

       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.

   Allowed Forms
       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]

SEE ALSO

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

HOME PAGE

       <http://user42.tuxfamily.org/perl-critic-pulp/index.html>

COPYRIGHT

       Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019, 2021 Kevin Ryde

       Perl-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/>.

perl v5.32.1                              Perl::Critic::Policy::Modules::ProhibitPOSIXimport(3pm)