Scroll to navigation

Perl::Critic::PolicySummary(3) User Contributed Perl Documentation 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::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::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::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.105.

AUTHOR

Jeffrey Ryan Thalhammer <thaljef@cpan.org>

COPYRIGHT

Copyright (c) 2005-2009 Jeffrey Ryan Thalhammer. 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.

2010-12-13 perl v5.10.1