=over =item sub BLOCK =item sub NAME =item sub NAME BLOCK This is subroutine definition, not a real function I. With just a NAME (and possibly prototypes), it's just a forward declaration. Without a NAME, it's an anonymous function declaration, and does actually return a value: the CODE ref of the closure you just created. See L and L for details. =back