Chapter 7. Subroutine References
So far, we’ve shown references to three main Perl data types: scalars, arrays, and hashes. We can also take a reference to a subroutine (sometimes called a coderef).
Why would we want to do that? Well, in the same way that taking a reference to an array lets us have the same code work on different arrays at different times, taking a reference to a subroutine allows the same code to call different subroutines at different times. Also, references permit complex data structures. A reference to a subroutine allows a subroutine to effectively become part of that complex data structure.
Put another way, a variable or a complex data structure is a repository of values throughout the program. A reference to a subroutine can be thought of as a repository of behavior in a program. The examples in this section show how this works.
Referencing a Named Subroutine
The Skipper and Gilligan are having a conversation:
subskipper_greets{my$person=shift;"Skipper: Hey there, $person!\n";}subgilligan_greets{my$person=shift;if($personeq"Skipper"){"Gilligan: Sir, yes, sir, $person!\n";}else{"Gilligan: Hi, $person!\n";}}skipper_greets("Gilligan");gilligan_greets("Skipper");
This results in:
Skipper: Hey there, Gilligan! Gilligan: Sir, yes, sir, Skipper!
So far, nothing unusual has happened. Note, however, that Gilligan has two different behaviors, depending on whether he’s addressing the Skipper or someone else.
Now, have the Professor ...