Call subroutines with parentheses but without a leading &. [Call Syntax ]
Don't give subroutines the same names as built-in functions. [Homonyms ]
Always unpack @_ first. [Argument Lists ]
Use a hash of named arguments for any subroutine that has more than three parameters. [Named Arguments ]
Use definedness or existence to test for missing arguments. [Missing Arguments ]
Resolve any default argument values as soon as @_ is unpacked. [Default Argument Values ]
Always return scalar in scalar returns. [Scalar Return Values ]
Make list-returning subroutines return the "obvious" value in scalar context. [Contextual Return Values ]
When there is no "obvious" scalar context return value, consider Contextual::Return instead. [Multi-Contextual Return Values ]
Always return via an explicit return. [Implicit Returns ]
Use a bare return to return failure. [Returning Failure ]