Perl::Critic::PolicySummary(3)

NAME
Perl::Critic::PolicySummary - Descriptions of the Policy modules included with Perl::Critic itself.

DESCRIPTION
The following Policy modules are distributed with Perl::Critic. (There are additional Policies that can be found in add-on distributions.) The Policy modules have been categorized according to the table of contents in Damian Conway's book Perl Best Practices. Since most coding standards take the form "do this..." or "don't do that...", I have adopted the convention of naming each module "RequireSomething" or "ProhibitSomething". Each Policy is listed here with its default severity. If you don't agree with the default severity, you can change it in your .perlcriticrc file. See the documentation of each module for its specific details.

POLICIES

  Perl::Critic::Policy::BuiltinFunctions::ProhibitBooleanGrep
Use "List::MoreUtils::any" instead of "grep" in boolean context. [Severity 2]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitComplexMappings
Map blocks should have a single statement. [Severity 3]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitLvalueSubstr
Use 4-argument "substr" instead of writing "substr($foo, 2, 6) = $bar". [Severity 3]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitReverseSortBlock
Forbid $b before $a in sort blocks. [Severity 1]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitSleepViaSelect
Use Time::HiRes instead of something like "select(undef, undef, undef, .05)". [Severity 5]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitStringyEval
Write "eval { my $foo; bar($foo) }" instead of "eval "my $foo; bar($foo);"". [Severity 5]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitStringySplit
Write "split /-/, $string" instead of "split '-', $string". [Severity 2]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitUniversalCan
Write "eval { $foo->can($name) }" instead of "UNIVERSAL::can($foo, $name)". [Severity 3]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitUniversalIsa
Write "eval { $foo->isa($pkg) }" instead of "UNIVERSAL::isa($foo, $pkg)". [Severity 3]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitVoidGrep
Don't use "grep" in void contexts. [Severity 3]

  Perl::Critic::Policy::BuiltinFunctions::ProhibitVoidMap
Don't use "map" in void contexts. [Severity 3]

  Perl::Critic::Policy::BuiltinFunctions::RequireBlockGrep
Write "grep { $_ =~ /$pattern/ } @list" instead of "grep /$pattern/, @list". [Severity 4]

  Perl::Critic::Policy::BuiltinFunctions::RequireBlockMap
Write "map { $_ =~ /$pattern/ } @list" instead of "map /$pattern/, @list". [Severity 4]

  Perl::Critic::Policy::BuiltinFunctions::RequireGlobFunction
Use "glob q{*}" instead of <*>. [Severity 5]

  Perl::Critic::Policy::BuiltinFunctions::RequireSimpleSortBlock
Sort blocks should have a single statement. [Severity 3]

  Perl::Critic::Policy::ClassHierarchies::ProhibitAutoloading
AUTOLOAD methods should be avoided. [Severity 3]

  Perl::Critic::Policy::ClassHierarchies::ProhibitExplicitISA
Employ "use base" instead of @ISA. [Severity 3]

  Perl::Critic::Policy::ClassHierarchies::ProhibitOneArgBless
Write "bless {}, $class;" instead of just "bless {};". [Severity 5]

  Perl::Critic::Policy::CodeLayout::ProhibitHardTabs
Use spaces instead of tabs. [Severity 3]

  Perl::Critic::Policy::CodeLayout::ProhibitParensWithBuiltins
Write "open $handle, $path" instead of "open($handle, $path)". [Severity 1]

  Perl::Critic::Policy::CodeLayout::ProhibitQuotedWordLists
Write "qw(foo bar baz)" instead of "('foo', 'bar', 'baz')". [Severity 2]

  Perl::Critic::Policy::CodeLayout::ProhibitTrailingWhitespace
Don't use whitespace at the end of lines. [Severity 1]

  Perl::Critic::Policy::CodeLayout::RequireConsistentNewlines
Use the same newline through the source. [Severity 4]

  Perl::Critic::Policy::CodeLayout::RequireTidyCode
Must run code through perltidy. [Severity 1]

  Perl::Critic::Policy::CodeLayout::RequireTrailingCommas
Put a comma at the end of every multi-line list declaration, including the last one. [Severity 1]

  Perl::Critic::Policy::ControlStructures::ProhibitCStyleForLoops
Write "for(0..20)" instead of "for($i=0; $i<=20; $i++)". [Severity 2]

  Perl::Critic::Policy::ControlStructures::ProhibitCascadingIfElse
Don't write long "if-elsif-elsif-elsif-elsif...else" chains. [Severity 3]

  Perl::Critic::Policy::ControlStructures::ProhibitDeepNests
Don't write deeply nested loops and conditionals. [Severity 3]

  Perl::Critic::Policy::ControlStructures::ProhibitLabelsWithSpecialBlockNames
Don't use labels that are the same as the special block names. [Severity 4]

  Perl::Critic::Policy::ControlStructures::ProhibitMutatingListFunctions
Don't modify $_ in list functions. [Severity 5]

  Perl::Critic::Policy::ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions
Don't use operators like "not", "!~", and "le" within "until" and "unless". [Severity 3]

  Perl::Critic::Policy::ControlStructures::ProhibitPostfixControls
Write "if($condition){ do_something() }" instead of "do_something() if $condition". [Severity 2]

  Perl::Critic::Policy::ControlStructures::ProhibitUnlessBlocks
Write "if(! $condition)" instead of "unless($condition)". [Severity 2]

  Perl::Critic::Policy::ControlStructures::ProhibitUnreachableCode
Don't write code after an unconditional "die, exit, or next". [Severity 4]

  Perl::Critic::Policy::ControlStructures::ProhibitUntilBlocks
Write "while(! $condition)" instead of "until($condition)". [Severity 2]

  Perl::Critic::Policy::Documentation::PodSpelling
Check your spelling. [Severity 1]

  Perl::Critic::Policy::Documentation::RequirePackageMatchesPodName
The "=head1 NAME" section should match the package. [Severity 1]

  Perl::Critic::Policy::Documentation::RequirePodAtEnd
All POD should be after "__END__". [Severity 1]

  Perl::Critic::Policy::Documentation::RequirePodLinksIncludeText
Provide text to display with your pod links. [Severity 2]

  Perl::Critic::Policy::Documentation::RequirePodSections
Organize your POD into the customary sections. [Severity 2]

  Perl::Critic::Policy::ErrorHandling::RequireCarping
Use functions from Carp instead of "warn" or "die". [Severity 3]

  Perl::Critic::Policy::ErrorHandling::RequireCheckingReturnValueOfEval
You can't depend upon the value of $@/$EVAL_ERROR to tell whether an "eval" failed. [Severity 3]

  Perl::Critic::Policy::InputOutput::ProhibitBacktickOperators
Discourage stuff like "@files = `ls $directory`". [Severity 3]

  Perl::Critic::Policy::InputOutput::ProhibitBarewordFileHandles
Write "open my $fh, q{<}, $filename;" instead of "open FH, q{<}, $filename;". [Severity 5]

  Perl::Critic::Policy::InputOutput::ProhibitExplicitStdin
Use "<>" or "<ARGV>" or a prompting module instead of "<STDIN>". [Severity 4]

  Perl::Critic::Policy::InputOutput::ProhibitInteractiveTest
Use prompt() instead of -t. [Severity 5]

  Perl::Critic::Policy::InputOutput::ProhibitJoinedReadline
Use "local $/ = undef" or File::Slurp instead of joined readline. [Severity 3]

  Perl::Critic::Policy::InputOutput::ProhibitOneArgSelect
Never write "select($fh)". [Severity 4]

  Perl::Critic::Policy::InputOutput::ProhibitReadlineInForLoop
Write "while( $line = <> ){...}" instead of "for(<>){...}". [Severity 4]

  Perl::Critic::Policy::InputOutput::ProhibitTwoArgOpen
Write "open $fh, q{<}, $filename;" instead of "open $fh, "<$filename";". [Severity 5]

  Perl::Critic::Policy::InputOutput::RequireBracedFileHandleWithPrint
Write "print {$FH} $foo, $bar;" instead of "print $FH $foo, $bar;". [Severity 1]

  Perl::Critic::Policy::InputOutput::RequireBriefOpen
Close filehandles as soon as possible after opening them. [Severity 4]

  Perl::Critic::Policy::InputOutput::RequireCheckedClose
Write "my $error = close $fh;" instead of "close $fh;". [Severity 2]

  Perl::Critic::Policy::InputOutput::RequireCheckedOpen
Write "my $error = open $fh, $mode, $filename;" instead of "open $fh, $mode, $filename;". [Severity 3]

  Perl::Critic::Policy::InputOutput::RequireCheckedSyscalls
Return value of flagged function ignored. [Severity 1]

  Perl::Critic::Policy::Miscellanea::ProhibitFormats
Do not use "format". [Severity 3]

  Perl::Critic::Policy::Miscellanea::ProhibitTies
Do not use "tie". [Severity 2]

  Perl::Critic::Policy::Miscellanea::ProhibitUnrestrictedNoCritic
Forbid a bare "## no critic" [Severity 3]

  Perl::Critic::Policy::Miscellanea::ProhibitUselessNoCritic
Remove ineffective "## no critic" annotations. [Severity 2]

  Perl::Critic::Policy::Miscellanea::RequireRcsKeywords
Put source-control keywords in every file. [Severity 2]

  Perl::Critic::Policy::Modules::ProhibitAutomaticExportation
Export symbols via @EXPORT_OK or %EXPORT_TAGS instead of @EXPORT. [Severity 4]

  Perl::Critic::Policy::Modules::ProhibitEvilModules
Ban modules that aren't blessed by your shop. [Severity 5]

  Perl::Critic::Policy::Modules::ProhibitExcessMainComplexity
Minimize complexity in code that is outside of subroutines. [Severity 3]

  Perl::Critic::Policy::Modules::ProhibitMultiplePackages
Put packages (especially subclasses) in separate files. [Severity 4]

  Perl::Critic::Policy::Modules::RequireBarewordIncludes
Write "require Module" instead of "require 'Module.pm'". [Severity 5]

  Perl::Critic::Policy::Modules::RequireEndWithOne
End each module with an explicitly "1;" instead of some funky expression. [Severity 4]

  Perl::Critic::Policy::Modules::RequireExplicitPackage
Always make the "package" explicit. [Severity 4]

  Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage
Package declaration must match filename. [Severity 5]

  Perl::Critic::Policy::Modules::RequireNoMatchVarsWithUseEnglish
"use English" must be passed a "-no_match_vars" argument. [Severity 2]

  Perl::Critic::Policy::Modules::RequireVersionVar
Give every module a $VERSION number. [Severity 2]

  Perl::Critic::Policy::NamingConventions::Capitalization
Distinguish different program components by case. [Severity 1]

  Perl::Critic::Policy::NamingConventions::ProhibitAmbiguousNames
Don't use vague variable or subroutine names like 'last' or 'record'. [Severity 3]

  Perl::Critic::Policy::Objects::ProhibitIndirectSyntax
Prohibit indirect object call syntax. [Severity 4]

  Perl::Critic::Policy::References::ProhibitDoubleSigils
Write "@{ $array_ref }" instead of @$array_ref. [Severity 2]

  Perl::Critic::Policy::RegularExpressions::ProhibitCaptureWithoutTest
Capture variable used outside conditional. [Severity 3]

  Perl::Critic::Policy::RegularExpressions::ProhibitComplexRegexes
Split long regexps into smaller "qr//" chunks. [Severity 3]

  Perl::Critic::Policy::RegularExpressions::ProhibitEnumeratedClasses
Use named character classes instead of explicit character lists. [Severity 1]

  Perl::Critic::Policy::RegularExpressions::ProhibitEscapedMetacharacters
Use character classes for literal meta-characters instead of escapes. [Severity 1]

  Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches
Use "eq" or hash instead of fixed-pattern regexps. [Severity 2]

  Perl::Critic::Policy::RegularExpressions::ProhibitSingleCharAlternation
Use "[abc]" instead of "a|b|c". [Severity 1]

  Perl::Critic::Policy::RegularExpressions::ProhibitUnusedCapture
Only use a capturing group if you plan to use the captured value. [Severity 3]

  Perl::Critic::Policy::RegularExpressions::ProhibitUnusualDelimiters
Use only "//" or "{}" to delimit regexps. [Severity 1]

  Perl::Critic::Policy::RegularExpressions::RequireBracesForMultiline
Use "{" and "}" to delimit multi-line regexps. [Severity 1]

  Perl::Critic::Policy::RegularExpressions::RequireDotMatchAnything
Always use the "/s" modifier with regular expressions. [Severity 2]

  Perl::Critic::Policy::RegularExpressions::RequireExtendedFormatting
Always use the "/x" modifier with regular expressions. [Severity 3]

  Perl::Critic::Policy::RegularExpressions::RequireLineBoundaryMatching
Always use the "/m" modifier with regular expressions. [Severity 2]

  Perl::Critic::Policy::Subroutines::ProhibitAmpersandSigils
Don't call functions with a leading ampersand sigil. [Severity 2]

  Perl::Critic::Policy::Subroutines::ProhibitBuiltinHomonyms
Don't declare your own "open" function. [Severity 4]

  Perl::Critic::Policy::Subroutines::ProhibitExcessComplexity
Minimize complexity by factoring code into smaller subroutines. [Severity 3]

  Perl::Critic::Policy::Subroutines::ProhibitExplicitReturnUndef
Return failure with bare "return" instead of "return undef". [Severity 5]

  Perl::Critic::Policy::Subroutines::ProhibitManyArgs
Too many arguments. [Severity 3]

  Perl::Critic::Policy::Subroutines::ProhibitNestedSubs
"sub never { sub correct {} }". [Severity 5]

  Perl::Critic::Policy::Subroutines::ProhibitReturnSort
Behavior of "sort" is not defined if called in scalar context. [Severity 5]

  Perl::Critic::Policy::Subroutines::ProhibitSubroutinePrototypes
Don't write "sub my_function (@@) {}". [Severity 5]

  Perl::Critic::Policy::Subroutines::ProhibitUnusedPrivateSubroutines
Prevent unused private subroutines. [Severity 3]

  Perl::Critic::Policy::Subroutines::ProtectPrivateSubs
Prevent access to private subs in other packages. [Severity 3]

  Perl::Critic::Policy::Subroutines::RequireArgUnpacking
Always unpack @_ first. [Severity 4]

  Perl::Critic::Policy::Subroutines::RequireFinalReturn
End every path through a subroutine with an explicit "return" statement. [Severity 4]

  Perl::Critic::Policy::TestingAndDebugging::ProhibitNoStrict
Prohibit various flavors of "no strict". [Severity 5]

  Perl::Critic::Policy::TestingAndDebugging::ProhibitNoWarnings
Prohibit various flavors of "no warnings". [Severity 4]

  Perl::Critic::Policy::TestingAndDebugging::ProhibitProlongedStrictureOverride
Don't turn off strict for large blocks of code. [Severity 4]

  Perl::Critic::Policy::TestingAndDebugging::RequireTestLabels
Tests should all have labels. [Severity 3]

  Perl::Critic::Policy::TestingAndDebugging::RequireUseStrict
Always "use strict". [Severity 5]

  Perl::Critic::Policy::TestingAndDebugging::RequireUseWarnings
Always "use warnings". [Severity 4]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitCommaSeparatedStatements
Don't use the comma operator as a statement separator. [Severity 4]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitComplexVersion
Prohibit version values from outside the module. [Severity 3]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitConstantPragma
Don't "use constant FOO => 15". [Severity 4]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitEmptyQuotes
Write "q{}" instead of ''. [Severity 2]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitEscapedCharacters
Write "\N{DELETE}" instead of "\x7F", etc. [Severity 2]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitImplicitNewlines
Use concatenation or HEREDOCs instead of literal line breaks in strings. [Severity 3]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitInterpolationOfLiterals
Always use single quotes for literal strings. [Severity 1]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitLeadingZeros
Write "oct(755)" instead of 0755. [Severity 5]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitLongChainsOfMethodCalls
Long chains of method calls indicate tightly coupled code. [Severity 2]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitMagicNumbers
Don't use values that don't explain themselves. [Severity 2]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitMismatchedOperators
Don't mix numeric operators with string operands, or vice-versa. [Severity 3]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators
Write " !$foo && $bar || $baz " instead of " not $foo && $bar or $baz". [Severity 4]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitNoisyQuotes
Use "q{}" or "qq{}" instead of quotes for awkward-looking strings. [Severity 2]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitQuotesAsQuotelikeOperatorDelimiters
Don't use quotes ("'", """, "`") as delimiters for the quote-like operators. [Severity 3]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminator
Don't write " print <<'__END__' ". [Severity 3]

  Perl::Critic::Policy::ValuesAndExpressions::ProhibitVersionStrings
Don't use strings like "v1.4" or 1.4.5 when including other modules. [Severity 3]

  Perl::Critic::Policy::ValuesAndExpressions::RequireConstantVersion
Require $VERSION to be a constant rather than a computed value. [Severity 2]

  Perl::Critic::Policy::ValuesAndExpressions::RequireInterpolationOfMetachars
Warns that you might have used single quotes when you really wanted double-quotes. [Severity 1]

  Perl::Critic::Policy::ValuesAndExpressions::RequireNumberSeparators
Write " 141_234_397.0145 " instead of 141234397.0145 . [Severity 2]

  Perl::Critic::Policy::ValuesAndExpressions::RequireQuotedHeredocTerminator
Write " print <<'THE_END' " or " print <<"THE_END" ". [Severity 3]

  Perl::Critic::Policy::ValuesAndExpressions::RequireUpperCaseHeredocTerminator
Write " <<'THE_END'; " instead of " <<'theEnd'; ". [Severity 2]

  Perl::Critic::Policy::Variables::ProhibitConditionalDeclarations
Do not write " my $foo = $bar if $baz; ". [Severity 5]

  Perl::Critic::Policy::Variables::ProhibitEvilVariables
Ban variables that aren't blessed by your shop. [Severity 5]

  Perl::Critic::Policy::Variables::ProhibitLocalVars
Use "my" instead of "local", except when you have to. [Severity 2]

  Perl::Critic::Policy::Variables::ProhibitMatchVars
Avoid "$`", $&, "$'" and their English equivalents. [Severity 4]

  Perl::Critic::Policy::Variables::ProhibitPackageVars
Eliminate globals declared with "our" or "use vars". [Severity 3]

  Perl::Critic::Policy::Variables::ProhibitPerl4PackageNames
Use double colon (::) to separate package name components instead of single quotes ('). [Severity 2]

  Perl::Critic::Policy::Variables::ProhibitPunctuationVars
Write $EVAL_ERROR instead of $@. [Severity 2]

  Perl::Critic::Policy::Variables::ProhibitReusedNames
Do not reuse a variable name in a lexical scope [Severity 3]

  Perl::Critic::Policy::Variables::ProhibitUnusedVariables
Don't ask for storage you don't need. [Severity 3]

  Perl::Critic::Policy::Variables::ProtectPrivateVars
Prevent access to private vars in other packages. [Severity 3]

  Perl::Critic::Policy::Variables::RequireInitializationForLocalVars
Write "local $foo = $bar;" instead of just "local $foo;". [Severity 3]

  Perl::Critic::Policy::Variables::RequireLexicalLoopIterators
Write "for my $element (@list) {...}" instead of "for $element (@list) {...}". [Severity 5]

  Perl::Critic::Policy::Variables::RequireLocalizedPunctuationVars
Magic variables should be assigned as "local". [Severity 4]

  Perl::Critic::Policy::Variables::RequireNegativeIndices
Negative array index should be used. [Severity 4]

VERSION
This is part of Perl::Critic version 1.108.

AUTHOR
Jeffrey Ryan Thalhammer <jeff@imaginative-software.com>

COPYRIGHT
Copyright (c) 2005-2010 Imaginative Software Systems. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of this license can be found in the LICENSE file included with this module.