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]