Provided by: libperl-critic-community-perl_1.0.3-1_all bug

NAME

       Perl::Critic::Policy::Community::DiscouragedModules - Various modules discouraged from use

DESCRIPTION

       Various modules are discouraged by some subsets of the community, for various reasons
       which may include: buggy behavior, cruft, performance problems, maintainer issues, or
       simply better modern replacements. This is a high severity complement to
       Perl::Critic::Policy::Community::PreferredAlternatives.

MODULES

   AnyEvent
       AnyEvent's author refuses to use public bugtracking and actively breaks interoperability.
       POE, IO::Async, and Mojo::IOLoop are widely used and interoperable async event loops.

   Any::Moose
       Any::Moose is deprecated. Use Moo instead.

   Class::DBI
       Class::DBI is an ancient database ORM <https://en.wikipedia.org/wiki/Object-
       relational_mapping> abstraction layer which is buggy and abandoned. See DBIx::Class for a
       more modern DBI-based ORM, or Mad::Mapper for a Mojolicious-style ORM.

   CGI
       CGI.pm is an ancient module for communicating via the CGI protocol, with tons of bad
       practices and cruft. Use a modern framework such as those based on Plack (Web::Simple,
       Dancer2, Catalyst) or Mojolicious, they can still be served via CGI if you choose. Use
       CGI::Tiny if you are limited to the CGI protocol.

   Coro
       Coro abuses Perl internals in an unsupported way. Consider Future and Future::AsyncAwait
       in combination with event loops for similar semantics.

   Error
       Error.pm is overly magical and discouraged by its maintainers. Try Throwable for exception
       classes in Moo/Moose, or Exception::Class otherwise. Try::Tiny or Syntax::Keyword::Try are
       recommended for the "try"/"catch" syntax.

   FindBin
       FindBin is often used to retrieve the absolute path to the directory containing the
       initially executed script, a mechanism which is not always logically clear. Additionally,
       it has serious bugs on old Perls and can't be updated from CPAN to fix them. The
       Path::This module provides similar variables and constants based on the absolute path to
       the current source file.  The lib::relative module resolves passed relative paths to the
       current source file for the common case of adding local module include directories.  Each
       of these documents examples of achieving the same behavior with core modules.

   File::Slurp
       File::Slurp gets file encodings all wrong, line endings on win32 are messed up, and it was
       written before layers were properly added. Use File::Slurper, "slurp" in Path::Tiny,
       "slurp" in Data::Munge, or "slurp" in Mojo::File.

   HTML::Template
       HTML::Template is an old and buggy module, try Template::Toolkit, Mojo::Template, or
       Text::Xslate instead, or HTML::Template::Pro if you must use the same syntax.

   IO::Socket::INET6
       IO::Socket::INET6 is an old attempt at an IPv6 compatible version of IO::Socket::INET, but
       has numerous issues and is discouraged by the maintainer in favor of IO::Socket::IP, which
       transparently creates IPv4 and IPv6 sockets.

   IP::World
       IP::World was built from two free publicly available databases. However, over the years
       one of them was discontinued, and the other is no longer being updated.  Therefore the
       module's accuracy is ever-decreasing. Try GeoIP2 as an alternative.  That code is also
       deprecated, but at least its database is still updated.

   JSON::Any
       JSON::Any is deprecated. Use JSON::MaybeXS instead.

   JSON::XS
       JSON::XS's author refuses to use public bugtracking and actively breaks interoperability.
       Cpanel::JSON::XS is a fork with several bugfixes and a more collaborative maintainer. See
       also JSON::MaybeXS.

   Net::IRC
       Net::IRC is an ancient module implementing the IRC protocol. Use a modern event-loop-based
       module instead. Choices are POE::Component::IRC (used for Bot::BasicBot), Net::Async::IRC,
       and Mojo::IRC.

   Switch
       Switch.pm is a buggy and outdated source filter which can cause any number of strange
       errors, in addition to the problems with smart-matching shared by its replacement, "The
       'switch' feature" in feature ("given"/"when"). Try Switch::Plain or Syntax::Keyword::Match
       instead.

   XML::Simple
       XML::Simple tries to coerce complex XML documents into perl data structures.  This leads
       to overcomplicated structures and unexpected behavior. Use a proper DOM parser instead
       like XML::LibXML, XML::TreeBuilder, XML::Twig, or Mojo::DOM.

AFFILIATION

       This policy is part of Perl::Critic::Community.

CONFIGURATION

       Occasionally you may find yourself needing to use one of these discouraged modules, and do
       not want the warnings.  You can do so by putting something like the following in a
       .perlcriticrc file like this:

           [Community::DiscouragedModules]
           allowed_modules = FindBin Any::Moose

       The same option is offered for Perl::Critic::Policy::Community::PreferredAlternatives.

AUTHOR

       Dan Book, "dbook@cpan.org"

COPYRIGHT AND LICENSE

       Copyright 2015, Dan Book.

       This library is free software; you may redistribute it and/or modify it under the terms of
       the Artistic License version 2.0.

SEE ALSO

       Perl::Critic

perl v5.34.0                             Perl::Critic::Policy::Community::DiscouragedModules(3pm)