- 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 C-style for statements. [C-Style Loops] 
- 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]