You are viewing the version of this documentation from Perl blead. This is the main development branch of Perl. (git commit f1e500f688f116c47f2aee6ae0f6b7c6be8e4e17)
sub NAME BLOCK
sub NAME (PROTO) BLOCK
sub NAME : ATTRS BLOCK
sub NAME (PROTO) : ATTRS BLOCK

This is subroutine definition, not a real function per se. Without a BLOCK it's just a forward declaration. Without a NAME, it's an anonymous function declaration, so does return a value: the CODE ref of the closure just created.

See perlsub and perlref for details about subroutines and references; see attributes and Attribute::Handlers for more information about attributes.