The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Perl::Critic::PolicySummary - Description of the bundled Policy modules

DESCRIPTION

The following Policy modules are distributed with Perl::Critic. 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 it's 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 it's specific details.

POLICIES

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 3]

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::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 2]

Perl::Critic::Policy::ControlStructures::ProhibitMutatingListFunctions

Don't modify $_ in list functions [Severity 5]

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::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::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::ProhibitInteractiveTest

Use prompt() instead of -t [Severity 5]

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::Miscellanea::ProhibitFormats

Do not use format. [Severity 3]

Perl::Critic::Policy::Miscellanea::ProhibitTies

Do not use tie. [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 3]

Perl::Critic::Policy::Modules::ProhibitEvilModules

Ban modules that aren't blessed by your shop. [Severity 5]

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::RequireVersionVar

Give every module a $VERSION number. [Severity 2]

Perl::Critic::Policy::NamingConventions::ProhibitAmbiguousNames

Don't use vague variable or subroutine names like 'last' or 'record'. [Severity 3]

Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseSubs

Write sub my_function{} instead of sub MyFunction{} [Severity 1]

Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseVars

Write $my_variable = 42 instead of $MyVariable = 42 [Severity 1]

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::RequireExtendedFormatting

Always use the /x modifier with regular expressions. [Severity 2]

Perl::Critic::Policy::RegularExpressions::RequireLineBoundaryMatching

Always use the /m modifier with regular expressions. [Severity 3]

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::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::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::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::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::ProhibitMagicNumbers

Use Readonly to give meaningful names for numeric literals. [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::ProhibitVersionStrings

Don't use strings like v1.4 or 1.4.5 when including other modules. [Severity 3]

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 1]

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::ProhibitPunctuationVars

Write $EVAL_ERROR instead of $@ [Severity 2]

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) {...}

Perl::Critic::Policy::Variables::RequireNegativeIndices

Negative array index should be used [Severity 4]

AUTHOR

Jeffrey Ryan Thalhammer <thaljef@cpan.org>

COPYRIGHT

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