Use block if, not postfix if. [If Blocks ]
Reserve postfix if for flow-of-control statements. [Postfix Selectors ]
Don't use postfix unless, for, while, or until. [Other Postfix Modifiers ]
Don't use unless or until at all. [Negative Control Statements ]
Avoid subscripting arrays or hashes within loops. [Unnecessary Subscripting ]
Never subscript more than once in a loop. [Necessary Subscripting ]
Use named lexicals as explicit for loop iterators. [Iterator Variables ]
Always declare a for loop iterator variable with my. [Non-Lexical Loop Iterators ]
Use map instead of for when generating new lists from old. [List Generation ]
Use grep and first instead of for when searching for values in a list. [List Selections ]
Use for instead of map when transforming a list in place. [List Transformation ]
Use a subroutine call to factor out complex list transformations. [Complex Mappings ]
Never modify $_ in a list function. [List Processing Side Effects ]
Avoid cascading an if. [Multipart Selections ]
Use table look-up in preference to cascaded equality tests. [Value Switches ]
When producing a value, use tabular ternaries. [Tabular Ternaries ]
Don't use do...while loops. [do-while Loops ]
Reject as many iterations as possible, as early as possible. [Linear Coding ]
Don't contort loop structures just to consolidate control. [Distributed Control ]
Use for and redo instead of an irregularly counted while. [Redoing ]
Label every loop that is exited explicitly, and use the label with every next, last, or redo. [Loop Labels ]