1Perl::Critic::Pulp(3) User Contributed Perl DocumentationPerl::Critic::Pulp(3)
2
3
4
6 Perl::Critic::Pulp - some add-on perlcritic policies
7
9 This is a collection of add-on policies for "Perl::Critic". They're
10 under a "pulp" theme plus other themes according to their purpose (see
11 "POLICY THEMES" in Perl::Critic).
12
13 Bugs
14 CodeLayout::ProhibitFatCommaNewline
15 Avoid newline before "=>" not quoting.
16
17 CodeLayout::ProhibitIfIfSameLine
18 Avoid "} if () {" perhaps meant to be "elsif".
19
20 Miscellanea::TextDomainPlaceholders
21 Check keyword arguments to "__x()", "__nx()", etc.
22
23 Modules::ProhibitUseQuotedVersion
24 Don't quote a version requirement like "use Foo '1.5'"
25
26 ValuesAndExpressions::RequireNumericVersion
27 $VERSION plain number for comparisons and checking.
28
29 ValuesAndExpressions::ConstantBeforeLt
30 Avoid problems with "FOO < 123"
31
32 ValuesAndExpressions::NotWithCompare
33 Avoid problems with "! $x == $y"
34
35 ValuesAndExpressions::ProhibitArrayAssignAref
36 Dubious "@array=[1,2,3]" array/arrayref assignments.
37
38 ValuesAndExpressions::ProhibitDuplicateHashKeys
39 Duplicate literal keys "%h = (xyz=>123, xyz=>456)".
40
41 ValuesAndExpressions::ProhibitFiletest_f
42 Don't use "-f".
43
44 ValuesAndExpressions::UnexpandedSpecialLiteral
45 "__PACKAGE__" etc special words not expanding.
46
47 Compatibility
48 Compatibility::ConstantPragmaHash
49 Version requirement for hash style multi-constants.
50
51 Compatibility::ConstantLeadingUnderscore
52 Version requirement for constants with leading underscore.
53
54 Compatibility::Gtk2Constants
55 Gtk2 module version requirement for some constants.
56
57 Compatibility::PerlMinimumVersionAndWhy
58 Perl version declared against features used.
59
60 Compatibility::PodMinimumVersion
61 Perl version declared against POD features used.
62
63 Compatibility::ProhibitUnixDevNull
64 Prefer "File::Spec->devnull" over /dev/null.
65
66 Efficiency
67 Documentation::RequireEndBeforeLastPod
68 Put "__END__" before POD at end of file.
69
70 Miscellanea::TextDomainUnused
71 "Locale::TextDomain" imported but not used.
72
73 Modules::ProhibitPOSIXimport
74 Don't import the whole of "POSIX".
75
76 Cosmetic
77 CodeLayout::RequireTrailingCommaAtNewline
78 Comma "," at the end of list, if at a newline.
79
80 CodeLayout::RequireFinalSemicolon
81 Semicolon ";" on the last statement of a subroutine or block.
82
83 ValuesAndExpressions::ProhibitEmptyCommas
84 Stray consecutive commas ",,"
85
86 ValuesAndExpressions::ProhibitNullStatements
87 Stray semicolons ";"
88
89 ValuesAndExpressions::ProhibitUnknownBackslash
90 Unknown "\z" etc escapes in strings.
91
92 ValuesAndExpressions::ProhibitBarewordDoubleColon
93 Double-colon barewords "Foo::Bar::"
94
95 Modules::ProhibitModuleShebang
96 No "#!" interpreter line in .pm files.
97
98 Documentation
99 Documentation::ProhibitUnbalancedParens
100 Unbalanced or mismatched ( ) parens, brackets and braces.
101
102 Documentation::ProhibitAdjacentLinks
103 Put commas or some text between adjacent "L<>" links.
104
105 Documentation::ProhibitDuplicateHeadings
106 Don't duplicate "=head" headings.
107
108 Documentation::ProhibitDuplicateSeeAlso
109 Don't duplicate "L<>" links in SEE ALSO sections.
110
111 Documentation::ProhibitBadAproposMarkup
112 Avoid "C<>" in NAME section, bad for man's "apropos" output.
113
114 Documentation::RequireFilenameMarkup
115 Markup /foo filenames.
116
117 Documentation::ProhibitLinkToSelf
118 Don't "L<>" link to the document itself.
119
120 Documentation::ProhibitParagraphEndComma
121 Don't end paragraph with "," comma.
122
123 Documentation::ProhibitParagraphTwoDots
124 Don't end paragraph with ".." (stray extra dot).
125
126 Documentation::ProhibitVerbatimMarkup
127 Verbatim paragraphs not expanding "C<>" etc markup.
128
129 Documentation::RequireFinalCut
130 Have a "=cut" at end of file.
131
132 Documentation::RequireLinkedURLs
133 Use "L<>" markup on URLs.
134
135 Selecting
136 You can always enable or disable the policies you do or don't want (see
137 "CONFIGURATION" in Perl::Critic). You may have already realized that
138 there's a wide range of builtin and add-on perlcritic policies ranging
139 from buggy practice to deliberately restrictive or even quite bizarre.
140 You're not meant to pass everything. Some policies may even be
141 mutually contradictory.
142
143 The restrictive policies are meant as building blocks for a limited
144 house style. For example "ProhibitBarewordDoubleColon" here, or
145 something like "ProhibitUnlessBlocks". They're usually a matter of
146 personal preference, and "non de gustibus disputandum" as they say in
147 the classics. Trying to follow all of them would give away big parts
148 of the language and quite likely result in very un-typical code.
149
150 Some of the restrictive policies are geared towards beginners.
151 "ProhibitUnknownBackslash" here or "RequireInitializationForLocalVars"
152 are along those lines. There might for instance be good backslashing
153 which the prohibition doesn't recognise, or local variable initializers
154 make no sense for output variables like $!, once you get to the level
155 of knowing to use "local" to preserve such globals.
156
157 In general the POD of each policy is supposed to explain the motivation
158 so you can see whether you want it or not. If you're not turning off
159 or drastically customizing at least half of all policies then you're
160 either not trying or you're much too easily lead!
161
163 In most of the perlcritic documentation, including the Pulp add-ons
164 here, policy names appear without the full "Perl::Critic::Policy::..."
165 class part. In Emacs try "man-completion.el" to make "M-x man"
166 automatically expand a suffix part at point, or "ffap-perl-module.el"
167 for the same to go to the source.
168
169 · <http://user42.tuxfamily.org/man-completion/index.html>
170
171 · <http://user42.tuxfamily.org/ffap-perl-module/index.html>
172
173 In perlcritic's output you can ask for %P to see the full policy
174 package name to run "perldoc" or copy or follow etc. Here's a good
175 output format you can put in your .perlcriticrc. The file:line:column:
176 part is a style Emacs will recognise.
177
178 verbose=%f:%l:%c:\n %P\n %m\n
179
180 See Perl::Critic::Violation for all available "%" escapes.
181 perlcritic.el which comes with perlcritic has regexp patterns for Emacs
182 to recognise the builtin perlcritic formats, but it's easier to output
183 "file:line:column:" in the first place.
184
186 Perl::Critic
187
189 <http://user42.tuxfamily.org/perl-critic-pulp/index.html>
190
192 Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
193 Kevin Ryde
194
195 Perl-Critic-Pulp is free software; you can redistribute it and/or
196 modify it under the terms of the GNU General Public License as
197 published by the Free Software Foundation; either version 3, or (at
198 your option) any later version.
199
200 Perl-Critic-Pulp is distributed in the hope that it will be useful, but
201 WITHOUT ANY WARRANTY; without even the implied warranty of
202 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
203 General Public License for more details.
204
205 You should have received a copy of the GNU General Public License along
206 with Perl-Critic-Pulp. If not, see <http://www.gnu.org/licenses/>.
207
208
209
210perl v5.28.0 2017-10-07 Perl::Critic::Pulp(3)