Perl::...Summary(3pm)
okay bestie, welcome to Perl::...Summary(3pm) from User Contributed Perl Documentation β the master-list page for the Policy modules that ship with Perl::Critic itself. this is the vibe check for your codeβs whole personality π
β¨
π NAME π
Perl::Critic::PolicySummary - Descriptions of the Policy modules included with Perl::Critic itself. π«Ά
β¨ DESCRIPTION β¨
okay so, 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. bestie, this is the slay move. [Default severity 2]
BuiltinFunctions::ProhibitComplexMappings
Map blocks should have a single statement. lowkey keep it simple. [Default severity 3]
BuiltinFunctions::ProhibitLvalueSubstr
Use 4-argument substr instead of writing substr($foo, 2, 6) = $bar. periodt. [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 <*>, bestie. [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 this, fr fr:
@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]
Okay, picking the policy list right back up β each entry still keeps its exact [Default severity N] badge, and weβre doing every single one, no skipping, bestie π
RegularExpressions::ProhibitUnusualDelimitersβ use only//or{}to delimit regexps, okay? [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/smodifier with regular expressions. [Default severity 2]RegularExpressions::RequireExtendedFormattingβ always use the/xmodifier with regular expressions. [Default severity 3]RegularExpressions::RequireLineBoundaryMatchingβ always use the/mmodifier 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 ownopenfunction, bestie. [Default severity 4]Subroutines::ProhibitExcessComplexityβ minimize complexity by factoring code into smaller subroutines. [Default severity 3]Subroutines::ProhibitExplicitReturnUndefβ return failure with barereturninstead ofreturn undef. [Default severity 5]Subroutines::ProhibitManyArgsβ too many arguments. [Default severity 3]Subroutines::ProhibitNestedSubsβ nope to this exact nesting:sub never { sub correct {} }. [Default severity 5]Subroutines::ProhibitReturnSortβ behavior ofsortis not defined if called in scalar context. [Default severity 5]Subroutines::ProhibitSubroutinePrototypesβ donβt writesub 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 explicitreturnstatement. [Default severity 4]TestingAndDebugging::ProhibitNoStrictβ prohibit various flavors ofno strict. [Default severity 5]TestingAndDebugging::ProhibitNoWarningsβ prohibit various flavors ofno 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β alwaysuse strict. [Default severity 5]TestingAndDebugging::RequireUseWarningsβ alwaysuse 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 douse constant FOO => 15. [Default severity 4]ValuesAndExpressions::ProhibitEmptyQuotesβ writeq{}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β writeoct(755)instead of0755. [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 || $bazinstead ofnot $foo && $bar or $baz. [Default severity 4]ValuesAndExpressions::ProhibitNoisyQuotesβ useq{}orqq{}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 writeprint <<'__END__'. [Default severity 3]ValuesAndExpressions::ProhibitVersionStringsβ donβt use strings likev1.4or1.4.5when including other modules. [Default severity 3]ValuesAndExpressions::RequireConstantVersionβ require$VERSIONto 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β write141_234_397.0145instead of141234397.0145. [Default severity 2]ValuesAndExpressions::RequireQuotedHeredocTerminatorβ writeprint <<'THE_END'orprint <<"THE_END". [Default severity 3]ValuesAndExpressions::RequireUpperCaseHeredocTerminatorβ write<<'THE_END';instead of<<'theEnd';. [Default severity 2]Variables::ProhibitAugmentedAssignmentInDeclarationβ do not writemy $foo .= 'bar';. [Default severity 4]Variables::ProhibitConditionalDeclarationsβ do not writemy $foo = $bar if $baz;. [Default severity 5]Variables::ProhibitEvilVariablesβ ban variables that arenβt blessed by your shop. [Default severity 5]Variables::ProhibitLocalVarsβ usemyinstead oflocal, except when you have to. [Default severity 2]Variables::ProhibitMatchVarsβ avoid$`,$&,$'and their English equivalents. [Default severity 4]Variables::ProhibitPackageVarsβ eliminate globals declared withouroruse 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_ERRORinstead 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β writelocal $foo = $bar;instead of justlocal $foo;. [Default severity 3]Variables::RequireLexicalLoopIteratorsβ writefor my $element (@list) {...}instead offor $element (@list) {...}. [Default severity 5]Variables::RequireLocalizedPunctuationVarsβ magic variables should be assigned aslocal. [Default severity 4]Variables::RequireNegativeIndicesβ negative array index should be used. [Default severity 4]
π VERSION π
Okay so this whole thing is part of Perl::Critic version 1.126. Periodt. β¨
β¨ AUTHOR β¨
Jeffrey Ryan Thalhammer <jeff@imaginative-software.com> β yes, thatβs the icon who authored it, bestie π«Ά
π 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. π¦
Thatβs the whole page, bestie β footer energy says perl v5.42.0 on 2024-10-23, and itβs giving official manual-page realness π
β¨
π¦ where this page comes from
- opensuse-leap 16.0: perl-Perl-Critic 1.156.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms