Chapter 4. Subroutine References and Closures
Many are called, but few are called back.
As with ordinary variables, subroutines can be named or anonymous, and Perl has a syntax for taking a reference to either type. Such references work rather like pointers to functions in C, and they can be used to create such sophisticated structures as the following:
Dispatch tables. Or data structures that map events to subroutine references. When an event comes in, a dispatch table is used to look up the corresponding subroutine. This is useful in creating large and efficient switch statements, finite state machines, signal handlers, and GUI toolkits.
Higher-order procedures. A higher-order procedure takes other procedures as arguments (like the C library procedure
qsort) or returns new procedures. The latter feature is available only in interpreted languages such as Perl, Python, and LISP (hey, LISPers, you have lambda functions!).Closures. A closure is a subroutine that, when created, packages its containing subroutine’s environment (all the variables it requires and that are not local to itself).
In the following sections, we look at the syntax for taking and managing subroutine references and subsequently use them in the applications listed.
Subroutine References
There’s nothing particularly fancy or magical about subroutine references. In this section, we’ll study how to create references to named and anonymous subroutines and how to dereference them.
References to Named ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access