![]() |
![]()
| ![]() |
![]()
NAMEPerl::Critic::PolicySummary - Descriptions of the Policy modules included with Perl::Critic itself. DESCRIPTIONThe 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. POLICIESBuiltinFunctions::ProhibitBooleanGrepUse "any" from "List::Util", "List::SomeUtils", or "List::MoreUtils" instead of "grep" in boolean context. [Default severity 2] BuiltinFunctions::ProhibitComplexMappingsMap blocks should have a single statement. [Default severity 3] BuiltinFunctions::ProhibitLvalueSubstrUse 4-argument "substr" instead of writing "substr($foo, 2, 6) = $bar". [Default severity 3] BuiltinFunctions::ProhibitReverseSortBlockForbid $b before $a in sort blocks. [Default severity 1] BuiltinFunctions::ProhibitShiftRefProhibit "\shift" in code [Default severity 3] BuiltinFunctions::ProhibitSleepViaSelectUse Time::HiRes instead of something like "select(undef, undef, undef, .05)". [Default severity 5] BuiltinFunctions::ProhibitStringyEvalWrite "eval { my $foo; bar($foo) }" instead of "eval "my $foo; bar($foo);"". [Default severity 5] BuiltinFunctions::ProhibitStringySplitWrite "split /-/, $string" instead of "split '-', $string". [Default severity 2] BuiltinFunctions::ProhibitUniversalCanWrite "eval { $foo->can($name) }" instead of "UNIVERSAL::can($foo, $name)". [Default severity 3] BuiltinFunctions::ProhibitUniversalIsaWrite "eval { $foo->isa($pkg) }" instead of "UNIVERSAL::isa($foo, $pkg)". [Default severity 3] BuiltinFunctions::ProhibitUselessTopicDon't pass $_ to built-in functions that assume it, or to most filetest operators. [Default severity 2] BuiltinFunctions::ProhibitVoidGrepDon't use "grep" in void contexts. [Default severity 3] BuiltinFunctions::ProhibitVoidMapDon't use "map" in void contexts. [Default severity 3] BuiltinFunctions::RequireBlockGrepWrite "grep { /$pattern/ } @list" instead of "grep /$pattern/, @list". [Default severity 4] BuiltinFunctions::RequireBlockMapWrite "map { /$pattern/ } @list" instead of "map /$pattern/, @list". [Default severity 4] BuiltinFunctions::RequireGlobFunctionUse "glob q{*}" instead of <*>. [Default severity 5] BuiltinFunctions::RequireSimpleSortBlockSort blocks should have a single statement. [Default severity 3] ClassHierarchies::ProhibitAutoloadingAUTOLOAD methods should be avoided. [Default severity 3] ClassHierarchies::ProhibitExplicitISAEmploy "use parent" instead of @ISA. [Default severity 3] ClassHierarchies::ProhibitOneArgBlessWrite "bless {}, $class;" instead of just "bless {};". [Default severity 5] CodeLayout::ProhibitHardTabsUse spaces instead of tabs. [Default severity 3] CodeLayout::ProhibitParensWithBuiltinsWrite "open $handle, $path" instead of "open($handle, $path)". [Default severity 1] CodeLayout::ProhibitQuotedWordListsWrite "qw(foo bar baz)" instead of "('foo', 'bar', 'baz')". [Default severity 2] CodeLayout::ProhibitTrailingWhitespaceDon't use whitespace at the end of lines. [Default severity 1] CodeLayout::RequireConsistentNewlinesUse the same newline through the source. [Default severity 4] CodeLayout::RequireTidyCodeMust run code through perltidy. [Default severity 1] CodeLayout::RequireTrailingCommasPut a comma at the end of every multi-line list declaration, including the last one. [Default severity 1] ControlStructures::ProhibitCStyleForLoopsWrite for(0..20) instead of "for($i=0; $i<=20; $i++)". [Default severity 2] ControlStructures::ProhibitCascadingIfElseDon't write long "if-elsif-elsif-elsif-elsif...else" chains. [Default severity 3] ControlStructures::ProhibitDeepNestsDon't write deeply nested loops and conditionals. [Default severity 3] ControlStructures::ProhibitLabelsWithSpecialBlockNamesDon't use labels that are the same as the special block names. [Default severity 4] ControlStructures::ProhibitMutatingListFunctionsDon't modify $_ in list functions. [Default severity 5] ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditionsDon't use operators like "not", "!~", and "le" within "until" and "unless". [Default severity 3] ControlStructures::ProhibitPostfixControlsWrite "if($condition){ do_something() }" instead of "do_something() if $condition". [Default severity 2] ControlStructures::ProhibitUnlessBlocksWrite "if(! $condition)" instead of unless($condition). [Default severity 2] ControlStructures::ProhibitUnreachableCodeDon't write code after an unconditional "die, exit, or next". [Default severity 4] ControlStructures::ProhibitUntilBlocksWrite "while(! $condition)" instead of until($condition). [Default severity 2] ControlStructures::ProhibitYadaOperatorNever use "..." in production code. [Default severity 4] Documentation::PodSpellingCheck your spelling. [Default severity 1] Documentation::RequirePackageMatchesPodNameThe "=head1 NAME" section should match the package. [Default severity 1] Documentation::RequirePodAtEndAll POD should be after "__END__". [Default severity 1] Documentation::RequirePodSectionsOrganize your POD into the customary sections. [Default severity 2] ErrorHandling::RequireCarpingUse functions from Carp instead of "warn" or "die". [Default severity 3] ErrorHandling::RequireCheckingReturnValueOfEvalYou can't depend upon the value of $@/$EVAL_ERROR to tell whether an "eval" failed. [Default severity 3] InputOutput::ProhibitBacktickOperatorsDiscourage stuff like "@files = `ls $directory`". [Default severity 3] InputOutput::ProhibitBarewordDirHandlesWrite "opendir my $dh, $dirname;" instead of "opendir DH, $dirname;". [Default severity 5] InputOutput::ProhibitBarewordFileHandlesWrite "open my $fh, q{<}, $filename;" instead of "open FH, q{<}, $filename;". [Default severity 5] InputOutput::ProhibitExplicitStdinUse "<>" or "<ARGV>" or a prompting module instead of "<STDIN>". [Default severity 4] InputOutput::ProhibitInteractiveTestUse prompt() instead of -t. [Default severity 5] InputOutput::ProhibitJoinedReadlineUse "local $/ = undef" or Path::Tiny instead of joined readline. [Default severity 3] InputOutput::ProhibitOneArgSelectNever write select($fh). [Default severity 4] InputOutput::ProhibitReadlineInForLoopWrite "while( $line = <> ){...}" instead of "for(<>){...}". [Default severity 4] InputOutput::ProhibitTwoArgOpenWrite "open $fh, q{<}, $filename;" instead of "open $fh, "<$filename";". [Default severity 5] InputOutput::RequireBracedFileHandleWithPrintWrite "print {$FH} $foo, $bar;" instead of "print $FH $foo, $bar;". [Default severity 1] InputOutput::RequireBriefOpenClose filehandles as soon as possible after opening them. [Default severity 4] InputOutput::RequireCheckedCloseWrite "my $error = close $fh;" instead of "close $fh;". [Default severity 2] InputOutput::RequireCheckedOpenWrite "my $error = open $fh, $mode, $filename;" instead of "open $fh, $mode, $filename;". [Default severity 3] InputOutput::RequireCheckedSyscallsReturn value of flagged function ignored. [Default severity 1] InputOutput::RequireEncodingWithUTF8LayerWrite "open $fh, q{<:encoding(UTF-8)}, $filename;" instead of "open $fh, q{<:utf8}, $filename;". [Default severity 5] Miscellanea::ProhibitFormatsDo not use "format". [Default severity 3] Miscellanea::ProhibitTiesDo not use "tie". [Default severity 2] Miscellanea::ProhibitUnrestrictedNoCriticForbid a bare "## no critic" [Default severity 3] Miscellanea::ProhibitUselessNoCriticRemove ineffective "## no critic" annotations. [Default severity 2] Modules::ProhibitAutomaticExportationExport symbols via @EXPORT_OK or %EXPORT_TAGS instead of @EXPORT. [Default severity 4] Modules::ProhibitConditionalUseStatementsAvoid putting conditional logic around compile-time includes. [Default severity 3] Modules::ProhibitEvilModulesBan modules that aren't blessed by your shop. [Default severity 5] Modules::ProhibitExcessMainComplexityMinimize complexity in code that is outside of subroutines. [Default severity 3] Modules::ProhibitMultiplePackagesPut packages (especially subclasses) in separate files. [Default severity 4] Modules::RequireBarewordIncludesWrite "require Module" instead of "require 'Module.pm'". [Default severity 5] Modules::RequireEndWithOneEnd each module with an explicitly "1;" instead of some funky expression. [Default severity 4] Modules::RequireExplicitPackageAlways make the "package" explicit. [Default severity 4] Modules::RequireFilenameMatchesPackagePackage declaration must match filename. [Default severity 5] Modules::RequireNoMatchVarsWithUseEnglish"use English" must be passed a "-no_match_vars" argument. [Default severity 2] Modules::RequireVersionVarGive every module a $VERSION number. [Default severity 2] NamingConventions::CapitalizationDistinguish different program components by case. [Default severity 1] NamingConventions::ProhibitAmbiguousNamesDon't use vague variable or subroutine names like 'last' or 'record'. [Default severity 3] Objects::ProhibitIndirectSyntaxProhibit indirect object call syntax. [Default severity 4] References::ProhibitDoubleSigilsWrite "@{ $array_ref }" instead of @$array_ref. [Default severity 2] RegularExpressions::ProhibitCaptureWithoutTestCapture variable used outside conditional. [Default severity 3] RegularExpressions::ProhibitComplexRegexesSplit long regexps into smaller "qr//" chunks. [Default severity 3] RegularExpressions::ProhibitEnumeratedClassesUse named character classes instead of explicit character lists. [Default severity 1] RegularExpressions::ProhibitEscapedMetacharactersUse character classes for literal meta-characters instead of escapes. [Default severity 1] RegularExpressions::ProhibitFixedStringMatchesUse "eq" or hash instead of fixed-pattern regexps. [Default severity 2] RegularExpressions::ProhibitSingleCharAlternationUse "[abc]" instead of "a|b|c". [Default severity 1] RegularExpressions::ProhibitUnusedCaptureOnly use a capturing group if you plan to use the captured value. [Default severity 3] RegularExpressions::ProhibitUnusualDelimitersUse only "//" or "{}" to delimit regexps. [Default severity 1] RegularExpressions::ProhibitUselessTopicDon't use $_ to match against regexes. [Default severity 2] RegularExpressions::RequireBracesForMultilineUse "{" and "}" to delimit multi-line regexps. [Default severity 1] RegularExpressions::RequireDotMatchAnythingAlways use the "/s" modifier with regular expressions. [Default severity 2] RegularExpressions::RequireExtendedFormattingAlways use the "/x" modifier with regular expressions. [Default severity 3] RegularExpressions::RequireLineBoundaryMatchingAlways use the "/m" modifier with regular expressions. [Default severity 2] Subroutines::ProhibitAmpersandSigilsDon't call functions with a leading ampersand sigil. [Default severity 2] Subroutines::ProhibitBuiltinHomonymsDon't declare your own "open" function. [Default severity 4] Subroutines::ProhibitExcessComplexityMinimize complexity by factoring code into smaller subroutines. [Default severity 3] Subroutines::ProhibitExplicitReturnUndefReturn failure with bare "return" instead of "return undef". [Default severity 5] Subroutines::ProhibitManyArgsToo many arguments. [Default severity 3] Subroutines::ProhibitNestedSubs"sub never { sub correct {} }". [Default severity 5] Subroutines::ProhibitReturnSortBehavior of "sort" is not defined if called in scalar context. [Default severity 5] Subroutines::ProhibitSubroutinePrototypesDon't write "sub my_function (@@) {}". [Default severity 5] Subroutines::ProhibitUnusedPrivateSubroutinesPrevent unused private subroutines. [Default severity 3] Subroutines::ProtectPrivateSubsPrevent access to private subs in other packages. [Default severity 3] Subroutines::RequireArgUnpackingAlways unpack @_ first. [Default severity 4] Subroutines::RequireFinalReturnEnd every path through a subroutine with an explicit "return" statement. [Default severity 4] TestingAndDebugging::ProhibitNoStrictProhibit various flavors of "no strict". [Default severity 5] TestingAndDebugging::ProhibitNoWarningsProhibit various flavors of "no warnings". [Default severity 4] TestingAndDebugging::ProhibitProlongedStrictureOverrideDon't turn off strict for large blocks of code. [Default severity 4] TestingAndDebugging::RequireTestLabelsTests should all have labels. [Default severity 3] TestingAndDebugging::RequireUseStrictAlways "use strict". [Default severity 5] TestingAndDebugging::RequireUseWarningsAlways "use warnings". [Default severity 4] ValuesAndExpressions::ProhibitCommaSeparatedStatementsDon't use the comma operator as a statement separator. [Default severity 4] ValuesAndExpressions::ProhibitComplexVersionProhibit version values from outside the module. [Default severity 3] ValuesAndExpressions::ProhibitConstantPragmaDon't "use constant FOO => 15". [Default severity 4] ValuesAndExpressions::ProhibitEmptyQuotesWrite "q{}" instead of ''. [Default severity 2] ValuesAndExpressions::ProhibitEscapedCharactersWrite "\N{DELETE}" instead of "\x7F", etc. [Default severity 2] ValuesAndExpressions::ProhibitImplicitNewlinesUse concatenation or HEREDOCs instead of literal line breaks in strings. [Default severity 3] ValuesAndExpressions::ProhibitInterpolationOfLiteralsAlways use single quotes for literal strings. [Default severity 1] ValuesAndExpressions::ProhibitLeadingZerosWrite oct(755) instead of 0755. [Default severity 5] ValuesAndExpressions::ProhibitLongChainsOfMethodCallsLong chains of method calls indicate tightly coupled code. [Default severity 2] ValuesAndExpressions::ProhibitMagicNumbersDon't use values that don't explain themselves. [Default severity 2] ValuesAndExpressions::ProhibitMismatchedOperatorsDon't mix numeric operators with string operands, or vice-versa. [Default severity 3] ValuesAndExpressions::ProhibitMixedBooleanOperatorsWrite " !$foo && $bar || $baz " instead of " not $foo && $bar or $baz". [Default severity 4] ValuesAndExpressions::ProhibitNoisyQuotesUse "q{}" or "qq{}" instead of quotes for awkward-looking strings. [Default severity 2] ValuesAndExpressions::ProhibitQuotesAsQuotelikeOperatorDelimitersDon't use quotes ("'", """, "`") as delimiters for the quote-like operators. [Default severity 3] ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminatorDon't write " print <<'__END__' ". [Default severity 3] ValuesAndExpressions::ProhibitVersionStringsDon't use strings like "v1.4" or 1.4.5 when including other modules. [Default severity 3] ValuesAndExpressions::RequireConstantVersionRequire $VERSION to be a constant rather than a computed value. [Default severity 2] ValuesAndExpressions::RequireInterpolationOfMetacharsWarns that you might have used single quotes when you really wanted double-quotes. [Default severity 1] ValuesAndExpressions::RequireNumberSeparatorsWrite " 141_234_397.0145 " instead of 141234397.0145 . [Default severity 2] ValuesAndExpressions::RequireQuotedHeredocTerminatorWrite " print <<'THE_END' " or " print <<"THE_END" ". [Default severity 3] ValuesAndExpressions::RequireUpperCaseHeredocTerminatorWrite " <<'THE_END'; " instead of " <<'theEnd'; ". [Default severity 2] Variables::ProhibitAugmentedAssignmentInDeclarationDo not write " my $foo .= 'bar'; ". [Default severity 4] Variables::ProhibitConditionalDeclarationsDo not write " my $foo = $bar if $baz; ". [Default severity 5] Variables::ProhibitEvilVariablesBan variables that aren't blessed by your shop. [Default severity 5] Variables::ProhibitLocalVarsUse "my" instead of "local", except when you have to. [Default severity 2] Variables::ProhibitMatchVarsAvoid "$`", $&, "$'" and their English equivalents. [Default severity 4] Variables::ProhibitPackageVarsEliminate globals declared with "our" or "use vars". [Default severity 3] Variables::ProhibitPerl4PackageNamesUse double colon (::) to separate package name components instead of single quotes ('). [Default severity 2] Variables::ProhibitPunctuationVarsWrite $EVAL_ERROR instead of $@. [Default severity 2] Variables::ProhibitReusedNamesDo not reuse a variable name in a lexical scope [Default severity 3] Variables::ProhibitUnusedVariablesDon't ask for storage you don't need. [Default severity 3] Variables::ProtectPrivateVarsPrevent access to private vars in other packages. [Default severity 3] Variables::RequireInitializationForLocalVarsWrite "local $foo = $bar;" instead of just "local $foo;". [Default severity 3] Variables::RequireLexicalLoopIteratorsWrite "for my $element (@list) {...}" instead of "for $element (@list) {...}". [Default severity 5] Variables::RequireLocalizedPunctuationVarsMagic variables should be assigned as "local". [Default severity 4] Variables::RequireNegativeIndicesNegative array index should be used. [Default severity 4] VERSIONThis is part of Perl::Critic version 1.126. AUTHORJeffrey Ryan Thalhammer <jeff@imaginative-software.com> COPYRIGHTCopyright (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.
|