1Perl::Critic(3)       User Contributed Perl Documentation      Perl::Critic(3)
2
3
4

NAME

6       Perl::Critic - Critique Perl source code for best-practices.
7

SYNOPSIS

9           use Perl::Critic;
10           my $file = shift;
11           my $critic = Perl::Critic->new();
12           my @violations = $critic->critique($file);
13           print @violations;
14

DESCRIPTION

16       Perl::Critic is an extensible framework for creating and applying
17       coding standards to Perl source code.  Essentially, it is a static
18       source code analysis engine.  Perl::Critic is distributed with a number
19       of Perl::Critic::Policy modules that attempt to enforce various coding
20       guidelines.  Most Policy modules are based on Damian Conway's book Perl
21       Best Practices.  However, Perl::Critic is not limited to PBP and will
22       even support Policies that contradict Conway.  You can enable, disable,
23       and customize those Polices through the Perl::Critic interface.  You
24       can also create new Policy modules that suit your own tastes.
25
26       For a command-line interface to Perl::Critic, see the documentation for
27       perlcritic.  If you want to integrate Perl::Critic with your build
28       process, Test::Perl::Critic provides an interface that is suitable for
29       test programs.  Also, Test::Perl::Critic::Progressive is useful for
30       gradually applying coding standards to legacy code.  For the ultimate
31       convenience (at the expense of some flexibility) see the criticism
32       pragma.
33
34       If you'd like to try Perl::Critic without installing anything, there is
35       a web-service available at <http://perlcritic.com>.  The web-service
36       does not yet support all the configuration features that are available
37       in the native Perl::Critic API, but it should give you a good idea of
38       what it does.
39
40       Also, ActivePerl includes a very slick graphical interface to Perl-
41       Critic called "perlcritic-gui".  You can get a free community edition
42       of ActivePerl from <http://www.activestate.com>.
43

PREREQUISITES

45       Perl::Critic runs on Perl back to Perl 5.10.1. It relies on the PPI
46       module to do the heavy work of parsing Perl.
47

INTERFACE SUPPORT

49       The "Perl::Critic" module is considered to be a public class. Any
50       changes to its interface will go through a deprecation cycle.
51

CONSTRUCTOR

53       "new( [ -profile => $FILE, -severity => $N, -theme => $string, -include
54       => \@PATTERNS, -exclude => \@PATTERNS, -top => $N, -only => $B,
55       -profile-strictness => $PROFILE_STRICTNESS_{WARN|FATAL|QUIET}, -force
56       => $B, -verbose => $N ], -color => $B, -pager => $string, -allow-unsafe
57       => $B, -criticism-fatal => $B)"
58       new()
59           Returns a reference to a new Perl::Critic object.  Most arguments
60           are just passed directly into Perl::Critic::Config, but I have
61           described them here as well.  The default value for all arguments
62           can be defined in your .perlcriticrc file.  See the "CONFIGURATION"
63           section for more information about that.  All arguments are
64           optional key-value pairs as follows:
65
66           -profile is a path to a configuration file. If $FILE is not
67           defined, Perl::Critic::Config attempts to find a .perlcriticrc
68           configuration file in the current directory, and then in your home
69           directory.  Alternatively, you can set the "PERLCRITIC" environment
70           variable to point to a file in another location.  If a
71           configuration file can't be found, or if $FILE is an empty string,
72           then all Policies will be loaded with their default configuration.
73           See "CONFIGURATION" for more information.
74
75           -severity is the minimum severity level.  Only Policy modules that
76           have a severity greater than $N will be applied.  Severity values
77           are integers ranging from 1 (least severe violations) to 5 (most
78           severe violations).  The default is 5.  For a given "-profile",
79           decreasing the "-severity" will usually reveal more Policy
80           violations. You can set the default value for this option in your
81           .perlcriticrc file.  Users can redefine the severity level for any
82           Policy in their .perlcriticrc file.  See "CONFIGURATION" for more
83           information.
84
85           If it is difficult for you to remember whether severity "5" is the
86           most or least restrictive level, then you can use one of these
87           named values:
88
89               SEVERITY NAME   ...is equivalent to...   SEVERITY NUMBER
90               --------------------------------------------------------
91               -severity => 'gentle'                     -severity => 5
92               -severity => 'stern'                      -severity => 4
93               -severity => 'harsh'                      -severity => 3
94               -severity => 'cruel'                      -severity => 2
95               -severity => 'brutal'                     -severity => 1
96
97           The names reflect how severely the code is criticized: a "gentle"
98           criticism reports only the most severe violations, and so on down
99           to a "brutal" criticism which reports even the most minor
100           violations.
101
102           -theme is special expression that determines which Policies to
103           apply based on their respective themes.  For example, the following
104           would load only Policies that have a 'bugs' AND 'pbp' theme:
105
106             my $critic = Perl::Critic->new( -theme => 'bugs && pbp' );
107
108           Unless the "-severity" option is explicitly given, setting "-theme"
109           silently causes the "-severity" to be set to 1.  You can set the
110           default value for this option in your .perlcriticrc file.  See the
111           "POLICY THEMES" section for more information about themes.
112
113           -include is a reference to a list of string @PATTERNS.  Policy
114           modules that match at least one "m/$PATTERN/ixms" will always be
115           loaded, irrespective of all other settings.  For example:
116
117               my $critic = Perl::Critic->new(-include => ['layout'], -severity => 4);
118
119           This would cause Perl::Critic to apply all the "CodeLayout::*"
120           Policy modules even though they have a severity level that is less
121           than 4. You can set the default value for this option in your
122           .perlcriticrc file.  You can also use "-include" in conjunction
123           with the "-exclude" option.  Note that "-exclude" takes precedence
124           over "-include" when a Policy matches both patterns.
125
126           -exclude is a reference to a list of string @PATTERNS.  Policy
127           modules that match at least one "m/$PATTERN/ixms" will not be
128           loaded, irrespective of all other settings.  For example:
129
130               my $critic = Perl::Critic->new(-exclude => ['strict'], -severity => 1);
131
132           This would cause Perl::Critic to not apply the "RequireUseStrict"
133           and "ProhibitNoStrict" Policy modules even though they have a
134           severity level that is greater than 1.  You can set the default
135           value for this option in your .perlcriticrc file.  You can also use
136           "-exclude" in conjunction with the "-include" option.  Note that
137           "-exclude" takes precedence over "-include" when a Policy matches
138           both patterns.
139
140           -single-policy is a string "PATTERN".  Only one policy that matches
141           "m/$PATTERN/ixms" will be used.  Policies that do not match will be
142           excluded.  This option has precedence over the "-severity",
143           "-theme", "-include", "-exclude", and "-only" options.  You can set
144           the default value for this option in your .perlcriticrc file.
145
146           -top is the maximum number of Violations to return when ranked by
147           their severity levels.  This must be a positive integer.
148           Violations are still returned in the order that they occur within
149           the file. Unless the "-severity" option is explicitly given,
150           setting "-top" silently causes the "-severity" to be set to 1.  You
151           can set the default value for this option in your .perlcriticrc
152           file.
153
154           -only is a boolean value.  If set to a true value, Perl::Critic
155           will only choose from Policies that are mentioned in the user's
156           profile.  If set to a false value (which is the default), then
157           Perl::Critic chooses from all the Policies that it finds at your
158           site. You can set the default value for this option in your
159           .perlcriticrc file.
160
161           -profile-strictness is an enumerated value, one of
162           "$PROFILE_STRICTNESS_WARN" in Perl::Critic::Utils::Constants (the
163           default), "$PROFILE_STRICTNESS_FATAL" in
164           Perl::Critic::Utils::Constants, and "$PROFILE_STRICTNESS_QUIET" in
165           Perl::Critic::Utils::Constants.  If set to
166           "$PROFILE_STRICTNESS_FATAL" in Perl::Critic::Utils::Constants,
167           Perl::Critic will make certain warnings about problems found in a
168           .perlcriticrc or file specified via the -profile option fatal. For
169           example, Perl::Critic normally only "warn"s about profiles
170           referring to non-existent Policies, but this value makes this
171           situation fatal.  Correspondingly, "$PROFILE_STRICTNESS_QUIET" in
172           Perl::Critic::Utils::Constants makes Perl::Critic shut up about
173           these things.
174
175           -force is a boolean value that controls whether Perl::Critic
176           observes the magical "## no critic" annotations in your code. If
177           set to a true value, Perl::Critic will analyze all code.  If set to
178           a false value (which is the default) Perl::Critic will ignore code
179           that is tagged with these annotations.  See "BENDING THE RULES" for
180           more information.  You can set the default value for this option in
181           your .perlcriticrc file.
182
183           -verbose can be a positive integer (from 1 to 11), or a literal
184           format specification.  See Perl::Critic::Violation for an
185           explanation of format specifications.  You can set the default
186           value for this option in your .perlcriticrc file.
187
188           -unsafe directs Perl::Critic to allow the use of Policies that are
189           marked as "unsafe" by the author.  Such policies may compile
190           untrusted code or do other nefarious things.
191
192           -color and -pager are not used by Perl::Critic but is provided for
193           the benefit of perlcritic.
194
195           -criticism-fatal is not used by Perl::Critic but is provided for
196           the benefit of criticism.
197
198           -color-severity-highest, -color-severity-high, -color-severity-
199           medium, -color-severity-low, and -color-severity-lowest are not
200           used by Perl::Critic, but are provided for the benefit of
201           perlcritic.  Each is set to the Term::ANSIColor color specification
202           to be used to display violations of the corresponding severity.
203
204           -files-with-violations and -files-without-violations are not used
205           by Perl::Critic, but are provided for the benefit of perlcritic, to
206           cause only the relevant filenames to be displayed.
207

METHODS

209       critique( $source_code )
210           Runs the $source_code through the Perl::Critic engine using all the
211           Policies that have been loaded into this engine.  If $source_code
212           is a scalar reference, then it is treated as a string of actual
213           Perl code.  If $source_code is a reference to an instance of
214           PPI::Document, then that instance is used directly. Otherwise, it
215           is treated as a path to a local file containing Perl code.  This
216           method returns a list of Perl::Critic::Violation objects for each
217           violation of the loaded Policies.  The list is sorted in the order
218           that the Violations appear in the code.  If there are no
219           violations, this method returns an empty list.
220
221       "add_policy( -policy => $policy_name, -params => \%param_hash )"
222           Creates a Policy object and loads it into this Critic.  If the
223           object cannot be instantiated, it will throw a fatal exception.
224           Otherwise, it returns a reference to this Critic.
225
226           -policy is the name of a Perl::Critic::Policy subclass module.  The
227           'Perl::Critic::Policy' portion of the name can be omitted for
228           brevity.  This argument is required.
229
230           -params is an optional reference to a hash of Policy parameters.
231           The contents of this hash reference will be passed into to the
232           constructor of the Policy module.  See the documentation in the
233           relevant Policy module for a description of the arguments it
234           supports.
235
236        policies()
237           Returns a list containing references to all the Policy objects that
238           have been loaded into this engine.  Objects will be in the order
239           that they were loaded.
240
241        config()
242           Returns the Perl::Critic::Config object that was created for or
243           given to this Critic.
244
245        statistics()
246           Returns the Perl::Critic::Statistics object that was created for
247           this Critic.  The Statistics object accumulates data for all files
248           that are analyzed by this Critic.
249

FUNCTIONAL INTERFACE

251       For those folks who prefer to have a functional interface, The
252       "critique" method can be exported on request and called as a static
253       function.  If the first argument is a hashref, its contents are used to
254       construct a new Perl::Critic object internally.  The keys of that hash
255       should be the same as those supported by the Perl::Critic::new()
256       method.  Here are some examples:
257
258           use Perl::Critic qw(critique);
259
260           # Use default parameters...
261           @violations = critique( $some_file );
262
263           # Use custom parameters...
264           @violations = critique( {-severity => 2}, $some_file );
265
266           # As a one-liner
267           %> perl -MPerl::Critic=critique -e 'print critique(shift)' some_file.pm
268
269       None of the other object-methods are currently supported as static
270       functions.  Sorry.
271

CONFIGURATION

273       Most of the settings for Perl::Critic and each of the Policy modules
274       can be controlled by a configuration file.  The default configuration
275       file is called .perlcriticrc.  Perl::Critic will look for this file in
276       the current directory first, and then in your home directory.
277       Alternatively, you can set the "PERLCRITIC" environment variable to
278       explicitly point to a different file in another location.  If none of
279       these files exist, and the "-profile" option is not given to the
280       constructor, then all the modules that are found in the
281       Perl::Critic::Policy namespace will be loaded with their default
282       configuration.
283
284       The format of the configuration file is a series of INI-style blocks
285       that contain key-value pairs separated by '='. Comments should start
286       with '#' and can be placed on a separate line or after the name-value
287       pairs if you desire.
288
289       Default settings for Perl::Critic itself can be set before the first
290       named block. For example, putting any or all of these at the top of
291       your configuration file will set the default value for the
292       corresponding constructor argument.
293
294           severity  = 3                                     #Integer or named level
295           only      = 1                                     #Zero or One
296           force     = 0                                     #Zero or One
297           verbose   = 4                                     #Integer or format spec
298           top       = 50                                    #A positive integer
299           theme     = (pbp || security) && bugs             #A theme expression
300           include   = NamingConventions ClassHierarchies    #Space-delimited list
301           exclude   = Variables  Modules::RequirePackage    #Space-delimited list
302           criticism-fatal = 1                               #Zero or One
303           color     = 1                                     #Zero or One
304           allow-unsafe = 1                                  #Zero or One
305           pager     = less                                  #pager to pipe output to
306
307       The remainder of the configuration file is a series of blocks like
308       this:
309
310           [Perl::Critic::Policy::Category::PolicyName]
311           severity = 1
312           set_themes = foo bar
313           add_themes = baz
314           maximum_violations_per_document = 57
315           arg1 = value1
316           arg2 = value2
317
318       "Perl::Critic::Policy::Category::PolicyName" is the full name of a
319       module that implements the policy.  The Policy modules distributed with
320       Perl::Critic have been grouped into categories according to the table
321       of contents in Damian Conway's book Perl Best Practices. For brevity,
322       you can omit the 'Perl::Critic::Policy' part of the module name.
323
324       "severity" is the level of importance you wish to assign to the Policy.
325       All Policy modules are defined with a default severity value ranging
326       from 1 (least severe) to 5 (most severe).  However, you may disagree
327       with the default severity and choose to give it a higher or lower
328       severity, based on your own coding philosophy.  You can set the
329       "severity" to an integer from 1 to 5, or use one of the equivalent
330       names:
331
332           SEVERITY NAME ...is equivalent to... SEVERITY NUMBER
333           ----------------------------------------------------
334           gentle                                             5
335           stern                                              4
336           harsh                                              3
337           cruel                                              2
338           brutal                                             1
339
340       The names reflect how severely the code is criticized: a "gentle"
341       criticism reports only the most severe violations, and so on down to a
342       "brutal" criticism which reports even the most minor violations.
343
344       "set_themes" sets the theme for the Policy and overrides its default
345       theme.  The argument is a string of one or more whitespace-delimited
346       alphanumeric words.  Themes are case-insensitive.  See "POLICY THEMES"
347       for more information.
348
349       "add_themes" appends to the default themes for this Policy.  The
350       argument is a string of one or more whitespace-delimited words. Themes
351       are case- insensitive.  See "POLICY THEMES" for more information.
352
353       "maximum_violations_per_document" limits the number of Violations the
354       Policy will return for a given document.  Some Policies have a default
355       limit; see the documentation for the individual Policies to see whether
356       there is one.  To force a Policy to not have a limit, specify
357       "no_limit" or the empty string for the value of this parameter.
358
359       The remaining key-value pairs are configuration parameters that will be
360       passed into the constructor for that Policy.  The constructors for most
361       Policy objects do not support arguments, and those that do should have
362       reasonable defaults.  See the documentation on the appropriate Policy
363       module for more details.
364
365       Instead of redefining the severity for a given Policy, you can
366       completely disable a Policy by prepending a '-' to the name of the
367       module in your configuration file.  In this manner, the Policy will
368       never be loaded, regardless of the "-severity" given to the
369       Perl::Critic constructor.
370
371       A simple configuration might look like this:
372
373           #--------------------------------------------------------------
374           # I think these are really important, so always load them
375
376           [TestingAndDebugging::RequireUseStrict]
377           severity = 5
378
379           [TestingAndDebugging::RequireUseWarnings]
380           severity = 5
381
382           #--------------------------------------------------------------
383           # I think these are less important, so only load when asked
384
385           [Variables::ProhibitPackageVars]
386           severity = 2
387
388           [ControlStructures::ProhibitPostfixControls]
389           allow = if unless  # My custom configuration
390           severity = cruel   # Same as "severity = 2"
391
392           #--------------------------------------------------------------
393           # Give these policies a custom theme.  I can activate just
394           # these policies by saying `perlcritic -theme larry`
395
396           [Modules::RequireFilenameMatchesPackage]
397           add_themes = larry
398
399           [TestingAndDebugging::RequireTestLabels]
400           add_themes = larry curly moe
401
402           #--------------------------------------------------------------
403           # I do not agree with these at all, so never load them
404
405           [-NamingConventions::Capitalization]
406           [-ValuesAndExpressions::ProhibitMagicNumbers]
407
408           #--------------------------------------------------------------
409           # For all other Policies, I accept the default severity,
410           # so no additional configuration is required for them.
411
412       For additional configuration examples, see the perlcriticrc file that
413       is included in this examples directory of this distribution.
414
415       Damian Conway's own Perl::Critic configuration is also included in this
416       distribution as examples/perlcriticrc-conway.
417

THE POLICIES

419       A large number of Policy modules are distributed with Perl::Critic.
420       They are described briefly in the companion document
421       Perl::Critic::PolicySummary and in more detail in the individual
422       modules themselves.  Say "perlcritic -doc PATTERN" to see the perldoc
423       for all Policy modules that match the regex "m/PATTERN/ixms"
424
425       There are a number of distributions of additional policies on CPAN. If
426       Perl::Critic doesn't contain a policy that you want, some one may have
427       already written it.  See the "SEE ALSO" section below for a list of
428       some of these distributions.
429

POLICY THEMES

431       Each Policy is defined with one or more "themes".  Themes can be used
432       to create arbitrary groups of Policies.  They are intended to provide
433       an alternative mechanism for selecting your preferred set of Policies.
434       For example, you may wish disable a certain subset of Policies when
435       analyzing test programs.  Conversely, you may wish to enable only a
436       specific subset of Policies when analyzing modules.
437
438       The Policies that ship with Perl::Critic have been broken into the
439       following themes.  This is just our attempt to provide some basic
440       logical groupings.  You are free to invent new themes that suit your
441       needs.
442
443           THEME             DESCRIPTION
444           --------------------------------------------------------------------------
445           core              All policies that ship with Perl::Critic
446           pbp               Policies that come directly from "Perl Best Practices"
447           bugs              Policies that that prevent or reveal bugs
448           certrec           Policies that CERT recommends
449           certrule          Policies that CERT considers rules
450           maintenance       Policies that affect the long-term health of the code
451           cosmetic          Policies that only have a superficial effect
452           complexity        Policies that specifically relate to code complexity
453           security          Policies that relate to security issues
454           tests             Policies that are specific to test programs
455
456       Any Policy may fit into multiple themes.  Say "perlcritic -list" to get
457       a listing of all available Policies and the themes that are associated
458       with each one.  You can also change the theme for any Policy in your
459       .perlcriticrc file.  See the "CONFIGURATION" section for more
460       information about that.
461
462       Using the "-theme" option, you can create an arbitrarily complex rule
463       that determines which Policies will be loaded.  Precedence is the same
464       as regular Perl code, and you can use parentheses to enforce precedence
465       as well.  Supported operators are:
466
467           Operator    Alternative    Example
468           -----------------------------------------------------------------
469           &&          and            'pbp && core'
470           ||          or             'pbp || (bugs && security)'
471           !           not            'pbp && ! (portability || complexity)'
472
473       Theme names are case-insensitive.  If the "-theme" is set to an empty
474       string, then it evaluates as true all Policies.
475

BENDING THE RULES

477       Perl::Critic takes a hard-line approach to your code: either you comply
478       or you don't.  In the real world, it is not always practical (nor even
479       possible) to fully comply with coding standards.  In such cases, it is
480       wise to show that you are knowingly violating the standards and that
481       you have a Damn Good Reason (DGR) for doing so.
482
483       To help with those situations, you can direct Perl::Critic to ignore
484       certain lines or blocks of code by using annotations:
485
486           require 'LegacyLibaray1.pl';  ## no critic
487           require 'LegacyLibrary2.pl';  ## no critic
488
489           for my $element (@list) {
490
491               ## no critic
492
493               $foo = "";               #Violates 'ProhibitEmptyQuotes'
494               $barf = bar() if $foo;   #Violates 'ProhibitPostfixControls'
495               #Some more evil code...
496
497               ## use critic
498
499               #Some good code...
500               do_something($_);
501           }
502
503       The "## no critic" annotations direct Perl::Critic to ignore the
504       remaining lines of code until a "## use critic" annotation is found. If
505       the "## no critic" annotation is on the same line as a code statement,
506       then only that line of code is overlooked.  To direct perlcritic to
507       ignore the "## no critic" annotations, use the "--force" option.
508
509       A bare "## no critic" annotation disables all the active Policies.  If
510       you wish to disable only specific Policies, add a list of Policy names
511       as arguments, just as you would for the "no strict" or "no warnings"
512       pragmas.  For example, this would disable the "ProhibitEmptyQuotes" and
513       "ProhibitPostfixControls" policies until the end of the block or until
514       the next "## use critic" annotation (whichever comes first):
515
516           ## no critic (EmptyQuotes, PostfixControls)
517
518           # Now exempt from ValuesAndExpressions::ProhibitEmptyQuotes
519           $foo = "";
520
521           # Now exempt ControlStructures::ProhibitPostfixControls
522           $barf = bar() if $foo;
523
524           # Still subjected to ValuesAndExpression::RequireNumberSeparators
525           $long_int = 10000000000;
526
527       Since the Policy names are matched against the "## no critic" arguments
528       as regular expressions, you can abbreviate the Policy names or disable
529       an entire family of Policies in one shot like this:
530
531           ## no critic (NamingConventions)
532
533           # Now exempt from NamingConventions::Capitalization
534           my $camelHumpVar = 'foo';
535
536           # Now exempt from NamingConventions::Capitalization
537           sub camelHumpSub {}
538
539       The argument list must be enclosed in parentheses or brackets and must
540       contain one or more comma-separated barewords (e.g. don't use quotes).
541       The "## no critic" annotations can be nested, and Policies named by an
542       inner annotation will be disabled along with those already disabled an
543       outer annotation.
544
545       Some Policies like "Subroutines::ProhibitExcessComplexity" apply to an
546       entire block of code.  In those cases, the "## no critic" annotation
547       must appear on the line where the violation is reported.  For example:
548
549           sub complicated_function {  ## no critic (ProhibitExcessComplexity)
550               # Your code here...
551           }
552
553       Policies such as "Documentation::RequirePodSections" apply to the
554       entire document, in which case violations are reported at line 1.
555
556       Use this feature wisely.  "## no critic" annotations should be used in
557       the smallest possible scope, or only on individual lines of code. And
558       you should always be as specific as possible about which Policies you
559       want to disable (i.e. never use a bare "## no critic").  If
560       Perl::Critic complains about your code, try and find a compliant
561       solution before resorting to this feature.
562

THE Perl::Critic PHILOSOPHY

564       Coding standards are deeply personal and highly subjective.  The goal
565       of Perl::Critic is to help you write code that conforms with a set of
566       best practices.  Our primary goal is not to dictate what those
567       practices are, but rather, to implement the practices discovered by
568       others.  Ultimately, you make the rules -- Perl::Critic is merely a
569       tool for encouraging consistency.  If there is a policy that you think
570       is important or that we have overlooked, we would be very grateful for
571       contributions, or you can simply load your own private set of policies
572       into Perl::Critic.
573

EXTENDING THE CRITIC

575       The modular design of Perl::Critic is intended to facilitate the
576       addition of new Policies.  You'll need to have some understanding of
577       PPI, but most Policy modules are pretty straightforward and only
578       require about 20 lines of code.  Please see the Perl::Critic::DEVELOPER
579       file included in this distribution for a step-by-step demonstration of
580       how to create new Policy modules.
581
582       If you develop any new Policy modules, feel free to send them to
583       "<team@perlcritic.com>" and I'll be happy to consider putting them into
584       the Perl::Critic distribution.  Or if you would like to work on the
585       Perl::Critic project directly, you can fork our repository at
586       <https://github.com/Perl-Critic/Perl-Critic.git>.
587
588       The Perl::Critic team is also available for hire.  If your organization
589       has its own coding standards, we can create custom Policies to enforce
590       your local guidelines.  Or if your code base is prone to a particular
591       defect pattern, we can design Policies that will help you catch those
592       costly defects before they go into production. To discuss your needs
593       with the Perl::Critic team, just contact "<team@perlcritic.com>".
594

PREREQUISITES

596       Perl::Critic requires the following modules:
597
598       B::Keywords
599
600       Config::Tiny
601
602       Exception::Class
603
604       File::Spec
605
606       File::Spec::Unix
607
608       File::Which
609
610       List::SomeUtils
611
612       List::Util
613
614       Module::Pluggable
615
616       Perl::Tidy
617
618       Pod::Spell
619
620       PPI
621
622       Pod::PlainText
623
624       Pod::Select
625
626       Pod::Usage
627
628       Readonly
629
630       Scalar::Util
631
632       String::Format
633
634       Term::ANSIColor
635
636       Text::ParseWords
637
638       version
639

CONTACTING THE DEVELOPMENT TEAM

641       You are encouraged to subscribe to the public mailing list at
642       <https://groups.google.com/d/forum/perl-critic>.  At least one member
643       of the development team is usually hanging around in
644       <irc://irc.perl.org/#perlcritic> and you can follow Perl::Critic on
645       Twitter, at <https://twitter.com/perlcritic>.
646

SEE ALSO

648       There are a number of distributions of additional Policies available. A
649       few are listed here:
650
651       Perl::Critic::More
652
653       Perl::Critic::Bangs
654
655       Perl::Critic::Lax
656
657       Perl::Critic::StricterSubs
658
659       Perl::Critic::Swift
660
661       Perl::Critic::Tics
662
663       These distributions enable you to use Perl::Critic in your unit tests:
664
665       Test::Perl::Critic
666
667       Test::Perl::Critic::Progressive
668
669       There is also a distribution that will install all the Perl::Critic
670       related modules known to the development team:
671
672       Task::Perl::Critic
673

BUGS

675       Scrutinizing Perl code is hard for humans, let alone machines.  If you
676       find any bugs, particularly false-positives or false-negatives from a
677       Perl::Critic::Policy, please submit them at
678       <https://github.com/Perl-Critic/Perl-Critic/issues>.  Thanks.
679

CREDITS

681       Adam Kennedy - For creating PPI, the heart and soul of Perl::Critic.
682
683       Damian Conway - For writing Perl Best Practices, finally :)
684
685       Chris Dolan - For contributing the best features and Policy modules.
686
687       Andy Lester - Wise sage and master of all-things-testing.
688
689       Elliot Shank - The self-proclaimed quality freak.
690
691       Giuseppe Maxia - For all the great ideas and positive encouragement.
692
693       and Sharon, my wife - For putting up with my all-night code sessions.
694
695       Thanks also to the Perl Foundation for providing a grant to support
696       Chris Dolan's project to implement twenty PBP policies.
697       <http://www.perlfoundation.org/april_1_2007_new_grant_awards>
698
699       Thanks also to this incomplete laundry list of folks who have
700       contributed to Perl::Critic in some way: Chris Novakovic, Isaac
701       Gittins, Tadeusz Sośnierz, Tom Wyant, TOYAMA Nao, Bernhard Schmalhofer,
702       Amory Meltzer, Andrew Grechkin, Daniel Mita, Gregory Oschwald, Mike
703       O'Regan, Tom Hukins, Omer Gazit, Evan Zacks, Paul Howarth, Sawyer X,
704       Christian Walde, Dave Rolsky, Jakub Wilk, Roy Ivy III, Oliver Trosien,
705       Glenn Fowler, Matt Creenan, Alex Balhatchet, Sebastian Paaske Tørholm,
706       Stuart A Johnston, Dan Book, Steven Humphrey, James Raspass, Nick
707       Tonkin, Harrison Katz, Douglas Sims, Mark Fowler, Alan Berndt, Neil
708       Bowers, Sergey Romanov, Gabor Szabo, Graham Knop, Mike Eldridge, David
709       Steinbrunner, Kirk Kimmel, Guillaume Aubert, Dave Cross, Anirvan
710       Chatterjee, Todd Rinaldo, Graham Ollis, Karen Etheridge, Jonas Brømsø,
711       Olaf Alders, Jim Keenan, Slaven Rezić, Szymon Nieznański.
712

AUTHOR

714       Jeffrey Ryan Thalhammer <jeff@imaginative-software.com>
715
717       Copyright (c) 2005-2023 Imaginative Software Systems
718
719       This program is free software; you can redistribute it and/or modify it
720       under the same terms as Perl itself.  The full text of this license can
721       be found in the LICENSE file included with this module.
722
723
724
725perl v5.36.0                      2023-03-05                   Perl::Critic(3)
Impressum