Provided by: libperl-critic-perl_1.148-1_all bug

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 (try
       "perlcritic --profile-proto" for a starting version).  See the documentation of each
       module for its specific details.

POLICIES

   BuiltinFunctions::ProhibitBooleanGrep
       Use "any" from "List::Util", "List::SomeUtils", or "List::MoreUtils" instead of "grep" in
       boolean context. [Default severity 2]

   BuiltinFunctions::ProhibitComplexMappings
       Map blocks should have a single statement. [Default severity 3]

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

   BuiltinFunctions::ProhibitReverseSortBlock
       Forbid $b before $a in sort blocks. [Default severity 1]

   BuiltinFunctions::ProhibitShiftRef
       Prohibit "\shift" in code [Default severity 3]

   BuiltinFunctions::ProhibitSleepViaSelect
       Use Time::HiRes instead of something like "select(undef, undef, undef, .05)". [Default
       severity 5]

   BuiltinFunctions::ProhibitStringyEval
       Write "eval { my $foo; bar($foo) }" instead of "eval "my $foo; bar($foo);"". [Default
       severity 5]

   BuiltinFunctions::ProhibitStringySplit
       Write "split /-/, $string" instead of "split '-', $string". [Default severity 2]

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

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

   BuiltinFunctions::ProhibitUselessTopic
       Don't pass $_ to built-in functions that assume it, or to most filetest operators.
       [Default severity 2]

   BuiltinFunctions::ProhibitVoidGrep
       Don't use "grep" in void contexts. [Default severity 3]

   BuiltinFunctions::ProhibitVoidMap
       Don't use "map" in void contexts. [Default severity 3]

   BuiltinFunctions::RequireBlockGrep
       Write "grep { /$pattern/ } @list" instead of "grep /$pattern/, @list". [Default severity
       4]

   BuiltinFunctions::RequireBlockMap
       Write "map { /$pattern/ } @list" instead of "map /$pattern/, @list". [Default severity 4]

   BuiltinFunctions::RequireGlobFunction
       Use "glob q{*}" instead of <*>. [Default severity 5]

   BuiltinFunctions::RequireSimpleSortBlock
       Sort blocks should have a single statement. [Default severity 3]

   ClassHierarchies::ProhibitAutoloading
       AUTOLOAD methods should be avoided. [Default severity 3]

   ClassHierarchies::ProhibitExplicitISA
       Employ "use parent" instead of @ISA. [Default severity 3]

   ClassHierarchies::ProhibitOneArgBless
       Write "bless {}, $class;" instead of just "bless {};". [Default severity 5]

   CodeLayout::ProhibitHardTabs
       Use spaces instead of tabs. [Default severity 3]

   CodeLayout::ProhibitParensWithBuiltins
       Write "open $handle, $path" instead of "open($handle, $path)". [Default severity 1]

   CodeLayout::ProhibitQuotedWordLists
       Write "qw(foo bar baz)" instead of "('foo', 'bar', 'baz')". [Default severity 2]

   CodeLayout::ProhibitTrailingWhitespace
       Don't use whitespace at the end of lines. [Default severity 1]

   CodeLayout::RequireConsistentNewlines
       Use the same newline through the source. [Default severity 4]

   CodeLayout::RequireTidyCode
       Must run code through perltidy. [Default severity 1]

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

   ControlStructures::ProhibitCStyleForLoops
       Write "for(0..20)" instead of "for($i=0; $i<=20; $i++)". [Default severity 2]

   ControlStructures::ProhibitCascadingIfElse
       Don't write long "if-elsif-elsif-elsif-elsif...else" chains. [Default severity 3]

   ControlStructures::ProhibitDeepNests
       Don't write deeply nested loops and conditionals. [Default severity 3]

   ControlStructures::ProhibitLabelsWithSpecialBlockNames
       Don't use labels that are the same as the special block names. [Default severity 4]

   ControlStructures::ProhibitMutatingListFunctions
       Don't modify $_ in list functions. [Default severity 5]

   ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions
       Don't use operators like "not", "!~", and "le" within "until" and "unless". [Default
       severity 3]

   ControlStructures::ProhibitPostfixControls
       Write "if($condition){ do_something() }" instead of "do_something() if $condition".
       [Default severity 2]

   ControlStructures::ProhibitUnlessBlocks
       Write "if(! $condition)" instead of "unless($condition)". [Default severity 2]

   ControlStructures::ProhibitUnreachableCode
       Don't write code after an unconditional "die, exit, or next". [Default severity 4]

   ControlStructures::ProhibitUntilBlocks
       Write "while(! $condition)" instead of "until($condition)". [Default severity 2]

   ControlStructures::ProhibitYadaOperator
       Never use "..." in production code. [Default severity 4]

   Documentation::PodSpelling
       Check your spelling. [Default severity 1]

   Documentation::RequirePackageMatchesPodName
       The "=head1 NAME" section should match the package. [Default severity 1]

   Documentation::RequirePodAtEnd
       All POD should be after "__END__". [Default severity 1]

   Documentation::RequirePodSections
       Organize your POD into the customary sections. [Default severity 2]

   ErrorHandling::RequireCarping
       Use functions from Carp instead of "warn" or "die". [Default severity 3]

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

   InputOutput::ProhibitBacktickOperators
       Discourage stuff like "@files = `ls $directory`". [Default severity 3]

   InputOutput::ProhibitBarewordDirHandles
       Write "opendir my $dh, $dirname;" instead of "opendir DH, $dirname;". [Default severity 5]

   InputOutput::ProhibitBarewordFileHandles
       Write "open my $fh, q{<}, $filename;" instead of "open FH, q{<}, $filename;". [Default
       severity 5]

   InputOutput::ProhibitExplicitStdin
       Use "<>" or "<ARGV>" or a prompting module instead of "<STDIN>". [Default severity 4]

   InputOutput::ProhibitInteractiveTest
       Use prompt() instead of -t. [Default severity 5]

   InputOutput::ProhibitJoinedReadline
       Use "local $/ = undef" or Path::Tiny instead of joined readline. [Default severity 3]

   InputOutput::ProhibitOneArgSelect
       Never write "select($fh)". [Default severity 4]

   InputOutput::ProhibitReadlineInForLoop
       Write "while( $line = <> ){...}" instead of "for(<>){...}". [Default severity 4]

   InputOutput::ProhibitTwoArgOpen
       Write "open $fh, q{<}, $filename;" instead of "open $fh, "<$filename";". [Default severity
       5]

   InputOutput::RequireBracedFileHandleWithPrint
       Write "print {$FH} $foo, $bar;" instead of "print $FH $foo, $bar;". [Default severity 1]

   InputOutput::RequireBriefOpen
       Close filehandles as soon as possible after opening them. [Default severity 4]

   InputOutput::RequireCheckedClose
       Write "my $error = close $fh;" instead of "close $fh;". [Default severity 2]

   InputOutput::RequireCheckedOpen
       Write "my $error = open $fh, $mode, $filename;" instead of "open $fh, $mode, $filename;".
       [Default severity 3]

   InputOutput::RequireCheckedSyscalls
       Return value of flagged function ignored. [Default severity 1]

   InputOutput::RequireEncodingWithUTF8Layer
       Write "open $fh, q{<:encoding(UTF-8)}, $filename;" instead of "open $fh, q{<:utf8},
       $filename;". [Default severity 5]

   Miscellanea::ProhibitFormats
       Do not use "format". [Default severity 3]

   Miscellanea::ProhibitTies
       Do not use "tie". [Default severity 2]

   Miscellanea::ProhibitUnrestrictedNoCritic
       Forbid a bare "## no critic" [Default severity 3]

   Miscellanea::ProhibitUselessNoCritic
       Remove ineffective "## no critic" annotations. [Default severity 2]

   Modules::ProhibitAutomaticExportation
       Export symbols via @EXPORT_OK or %EXPORT_TAGS instead of @EXPORT. [Default severity 4]

   Modules::ProhibitConditionalUseStatements
       Avoid putting conditional logic around compile-time includes. [Default severity 3]

   Modules::ProhibitEvilModules
       Ban modules that aren't blessed by your shop. [Default severity 5]

   Modules::ProhibitExcessMainComplexity
       Minimize complexity in code that is outside of subroutines. [Default severity 3]

   Modules::ProhibitMultiplePackages
       Put packages (especially subclasses) in separate files. [Default severity 4]

   Modules::RequireBarewordIncludes
       Write "require Module" instead of "require 'Module.pm'". [Default severity 5]

   Modules::RequireEndWithOne
       End each module with an explicitly "1;" instead of some funky expression. [Default
       severity 4]

   Modules::RequireExplicitPackage
       Always make the "package" explicit. [Default severity 4]

   Modules::RequireFilenameMatchesPackage
       Package declaration must match filename. [Default severity 5]

   Modules::RequireNoMatchVarsWithUseEnglish
       "use English" must be passed a "-no_match_vars" argument. [Default severity 2]

   Modules::RequireVersionVar
       Give every module a $VERSION number. [Default severity 2]

   NamingConventions::Capitalization
       Distinguish different program components by case. [Default severity 1]

   NamingConventions::ProhibitAmbiguousNames
       Don't use vague variable or subroutine names like 'last' or 'record'. [Default severity 3]

   Objects::ProhibitIndirectSyntax
       Prohibit indirect object call syntax. [Default severity 4]

   References::ProhibitDoubleSigils
       Write "@{ $array_ref }" instead of @$array_ref. [Default severity 2]

   RegularExpressions::ProhibitCaptureWithoutTest
       Capture variable used outside conditional. [Default severity 3]

   RegularExpressions::ProhibitComplexRegexes
       Split long regexps into smaller "qr//" chunks. [Default severity 3]

   RegularExpressions::ProhibitEnumeratedClasses
       Use named character classes instead of explicit character lists. [Default severity 1]

   RegularExpressions::ProhibitEscapedMetacharacters
       Use character classes for literal meta-characters instead of escapes. [Default severity 1]

   RegularExpressions::ProhibitFixedStringMatches
       Use "eq" or hash instead of fixed-pattern regexps. [Default severity 2]

   RegularExpressions::ProhibitSingleCharAlternation
       Use "[abc]" instead of "a|b|c". [Default severity 1]

   RegularExpressions::ProhibitUnusedCapture
       Only use a capturing group if you plan to use the captured value. [Default severity 3]

   RegularExpressions::ProhibitUnusualDelimiters
       Use only "//" or "{}" to delimit regexps. [Default severity 1]

   RegularExpressions::ProhibitUselessTopic
       Don't use $_ to match against regexes. [Default severity 2]

   RegularExpressions::RequireBracesForMultiline
       Use "{" and "}" to delimit multi-line regexps. [Default severity 1]

   RegularExpressions::RequireDotMatchAnything
       Always use the "/s" modifier with regular expressions. [Default severity 2]

   RegularExpressions::RequireExtendedFormatting
       Always use the "/x" modifier with regular expressions. [Default severity 3]

   RegularExpressions::RequireLineBoundaryMatching
       Always use the "/m" modifier with regular expressions. [Default severity 2]

   Subroutines::ProhibitAmpersandSigils
       Don't call functions with a leading ampersand sigil. [Default severity 2]

   Subroutines::ProhibitBuiltinHomonyms
       Don't declare your own "open" function. [Default severity 4]

   Subroutines::ProhibitExcessComplexity
       Minimize complexity by factoring code into smaller subroutines. [Default severity 3]

   Subroutines::ProhibitExplicitReturnUndef
       Return failure with bare "return" instead of "return undef". [Default severity 5]

   Subroutines::ProhibitManyArgs
       Too many arguments. [Default severity 3]

   Subroutines::ProhibitNestedSubs
       "sub never { sub correct {} }". [Default severity 5]

   Subroutines::ProhibitReturnSort
       Behavior of "sort" is not defined if called in scalar context. [Default severity 5]

   Subroutines::ProhibitSubroutinePrototypes
       Don't write "sub my_function (@@) {}". [Default severity 5]

   Subroutines::ProhibitUnusedPrivateSubroutines
       Prevent unused private subroutines. [Default severity 3]

   Subroutines::ProtectPrivateSubs
       Prevent access to private subs in other packages. [Default severity 3]

   Subroutines::RequireArgUnpacking
       Always unpack @_ first. [Default severity 4]

   Subroutines::RequireFinalReturn
       End every path through a subroutine with an explicit "return" statement. [Default severity
       4]

   TestingAndDebugging::ProhibitNoStrict
       Prohibit various flavors of "no strict". [Default severity 5]

   TestingAndDebugging::ProhibitNoWarnings
       Prohibit various flavors of "no warnings". [Default severity 4]

   TestingAndDebugging::ProhibitProlongedStrictureOverride
       Don't turn off strict for large blocks of code. [Default severity 4]

   TestingAndDebugging::RequireTestLabels
       Tests should all have labels. [Default severity 3]

   TestingAndDebugging::RequireUseStrict
       Always "use strict". [Default severity 5]

   TestingAndDebugging::RequireUseWarnings
       Always "use warnings". [Default severity 4]

   ValuesAndExpressions::ProhibitCommaSeparatedStatements
       Don't use the comma operator as a statement separator. [Default severity 4]

   ValuesAndExpressions::ProhibitComplexVersion
       Prohibit version values from outside the module. [Default severity 3]

   ValuesAndExpressions::ProhibitConstantPragma
       Don't "use constant FOO => 15". [Default severity 4]

   ValuesAndExpressions::ProhibitEmptyQuotes
       Write "q{}" instead of ''. [Default severity 2]

   ValuesAndExpressions::ProhibitEscapedCharacters
       Write "\N{DELETE}" instead of "\x7F", etc. [Default severity 2]

   ValuesAndExpressions::ProhibitImplicitNewlines
       Use concatenation or HEREDOCs instead of literal line breaks in strings. [Default severity
       3]

   ValuesAndExpressions::ProhibitInterpolationOfLiterals
       Always use single quotes for literal strings. [Default severity 1]

   ValuesAndExpressions::ProhibitLeadingZeros
       Write "oct(755)" instead of 0755. [Default severity 5]

   ValuesAndExpressions::ProhibitLongChainsOfMethodCalls
       Long chains of method calls indicate tightly coupled code. [Default severity 2]

   ValuesAndExpressions::ProhibitMagicNumbers
       Don't use values that don't explain themselves. [Default severity 2]

   ValuesAndExpressions::ProhibitMismatchedOperators
       Don't mix numeric operators with string operands, or vice-versa. [Default severity 3]

   ValuesAndExpressions::ProhibitMixedBooleanOperators
       Write " !$foo && $bar || $baz " instead of " not $foo && $bar or $baz". [Default severity
       4]

   ValuesAndExpressions::ProhibitNoisyQuotes
       Use "q{}" or "qq{}" instead of quotes for awkward-looking strings. [Default severity 2]

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

   ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminator
       Don't write " print <<'__END__' ". [Default severity 3]

   ValuesAndExpressions::ProhibitVersionStrings
       Don't use strings like "v1.4" or 1.4.5 when including other modules. [Default severity 3]

   ValuesAndExpressions::RequireConstantVersion
       Require $VERSION to be a constant rather than a computed value. [Default severity 2]

   ValuesAndExpressions::RequireInterpolationOfMetachars
       Warns that you might have used single quotes when you really wanted double-quotes.
       [Default severity 1]

   ValuesAndExpressions::RequireNumberSeparators
       Write " 141_234_397.0145 " instead of  141234397.0145 . [Default severity 2]

   ValuesAndExpressions::RequireQuotedHeredocTerminator
       Write " print <<'THE_END' " or " print <<"THE_END" ". [Default severity 3]

   ValuesAndExpressions::RequireUpperCaseHeredocTerminator
       Write " <<'THE_END'; " instead of " <<'theEnd'; ". [Default severity 2]

   Variables::ProhibitAugmentedAssignmentInDeclaration
       Do not write " my $foo .= 'bar'; ". [Default severity 4]

   Variables::ProhibitConditionalDeclarations
       Do not write " my $foo = $bar if $baz; ". [Default severity 5]

   Variables::ProhibitEvilVariables
       Ban variables that aren't blessed by your shop. [Default severity 5]

   Variables::ProhibitLocalVars
       Use "my" instead of "local", except when you have to. [Default severity 2]

   Variables::ProhibitMatchVars
       Avoid "$`", $&, "$'" and their English equivalents. [Default severity 4]

   Variables::ProhibitPackageVars
       Eliminate globals declared with "our" or "use vars". [Default severity 3]

   Variables::ProhibitPerl4PackageNames
       Use double colon (::) to separate package name components instead of single quotes (').
       [Default severity 2]

   Variables::ProhibitPunctuationVars
       Write $EVAL_ERROR instead of $@. [Default severity 2]

   Variables::ProhibitReusedNames
       Do not reuse a variable name in a lexical scope [Default severity 3]

   Variables::ProhibitUnusedVariables
       Don't ask for storage you don't need. [Default severity 3]

   Variables::ProtectPrivateVars
       Prevent access to private vars in other packages. [Default severity 3]

   Variables::RequireInitializationForLocalVars
       Write "local $foo = $bar;" instead of just "local $foo;". [Default severity 3]

   Variables::RequireLexicalLoopIterators
       Write "for my $element (@list) {...}" instead of "for $element (@list) {...}". [Default
       severity 5]

   Variables::RequireLocalizedPunctuationVars
       Magic variables should be assigned as "local". [Default severity 4]

   Variables::RequireNegativeIndices
       Negative array index should be used. [Default severity 4]

VERSION

       This is part of Perl::Critic version 1.126.

AUTHOR

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

COPYRIGHT

       Copyright (c) 2005-2011 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.