.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Perl::Critic::Policy::Freenode::DiscouragedModules 3pm" .TH Perl::Critic::Policy::Freenode::DiscouragedModules 3pm "2020-12-26" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Perl::Critic::Policy::Freenode::DiscouragedModules \- Various modules discouraged from use .SH "DESCRIPTION" .IX Header "DESCRIPTION" Various modules are discouraged by the denizens of #perl on Freenode \s-1IRC,\s0 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::Freenode::PreferredAlternatives. .SH "MODULES" .IX Header "MODULES" .SS "AnyEvent" .IX Subsection "AnyEvent" AnyEvent's author refuses to use public bugtracking and actively breaks interoperability. \s-1POE\s0, IO::Async, and Mojo::IOLoop are widely used and interoperable async event loops. .SS "Any::Moose" .IX Subsection "Any::Moose" Any::Moose is deprecated. Use Moo instead. .SS "Class::DBI" .IX Subsection "Class::DBI" Class::DBI is an ancient database \s-1ORM\s0 abstraction layer which is buggy and abandoned. See DBIx::Class for a more modern \s-1DBI\s0\-based \s-1ORM,\s0 or Mad::Mapper for a Mojolicious\-style \s-1ORM.\s0 .SS "\s-1CGI\s0" .IX Subsection "CGI" \&\s-1CGI\s0.pm is an ancient module for communicating via the \s-1CGI\s0 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 \s-1CGI\s0 if you choose. .SS "Coro" .IX Subsection "Coro" Coro abuses Perl internals in an unsupported way. Consider Future and Future::AsyncAwait in combination with event loops for similar semantics. .SS "Error" .IX Subsection "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 \&\f(CW\*(C`try\*(C'\fR/\f(CW\*(C`catch\*(C'\fR syntax. .SS "FindBin" .IX Subsection "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 \s-1CPAN\s0 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. .SS "File::Slurp" .IX Subsection "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, \&\*(L"slurp\*(R" in Path::Tiny, \*(L"slurp\*(R" in Data::Munge, or \*(L"slurp\*(R" in Mojo::File. .SS "HTML::Template" .IX Subsection "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. .SS "IO::Socket::INET6" .IX Subsection "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. .SS "JSON::Any" .IX Subsection "JSON::Any" JSON::Any is deprecated. Use JSON::MaybeXS instead. .SS "\s-1JSON::XS\s0" .IX Subsection "JSON::XS" \&\s-1JSON::XS\s0'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. .SS "Net::IRC" .IX Subsection "Net::IRC" Net::IRC is an ancient module implementing the \s-1IRC\s0 protocol. Use a modern event-loop-based module instead. Choices are POE::Component::IRC (used for Bot::BasicBot), Net::Async::IRC, and Mojo::IRC. .SS "Switch" .IX Subsection "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, \*(L"The 'switch' feature\*(R" in feature (\f(CW\*(C`given\*(C'\fR/\f(CW\*(C`when\*(C'\fR). Try Switch::Plain instead. .SS "XML::Simple" .IX Subsection "XML::Simple" XML::Simple tries to coerce complex \s-1XML\s0 documents into perl data structures. This leads to overcomplicated structures and unexpected behavior. Use a proper \&\s-1DOM\s0 parser instead like XML::LibXML, XML::TreeBuilder, XML::Twig, or Mojo::DOM. .SH "AFFILIATION" .IX Header "AFFILIATION" This policy is part of Perl::Critic::Freenode. .SH "CONFIGURATION" .IX Header "CONFIGURATION" This policy is not configurable except for the standard options. .SH "AUTHOR" .IX Header "AUTHOR" Dan Book, \f(CW\*(C`dbook@cpan.org\*(C'\fR .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright 2015, Dan Book. .PP This library is free software; you may redistribute it and/or modify it under the terms of the Artistic License version 2.0. .SH "SEE ALSO" .IX Header "SEE ALSO" Perl::Critic