pg, thanks, very informative.
I gave it a try to play around. If I'm not mistaken, the second line in the test1.pl code should read:
my $a = \&apackage::process1; #process1 does not exist at this moment
This ability to reference a non-existent entity made me wonder, what would happen if you point to the "same" non-existent item twice, will those references be the same? So I gave the following a try:
my $b = \&apackage2::process2;
my $c = \&apackage2::process2;
my $d = \&apackage2::process3;
Upon running, as should be, $b and $c both contain the same reference (that is, they compare as equal and print the same reference address). $d is a reference to a different not-yet-existent entity.
When these entities do get defined - that is, the require is executed such that there is now a real, matching-name subroutine - the pointer address does not change. Also as should be, but interesting (for a newbie) to watch in action.
Andy
@_="the journeyman larry disciple keeps learning\n"=~/(.)/gs,
print(map$_[$_-77],unpack(q=c*=,q@QSdM[]uRMNV^[ni_\[N]eki^y@))
|