http://www.perlmonks.org?node_id=609525


in reply to Is modifying the symbol table to redefine subroutines evil?

Assuming code-tampering is not an issue, how about this:
my $foo; # Global, because this is the only visible (subroutine ref) $foo=sub{ print qq[First call - do first processing here \n]; # First processing code goes here ... # Now setup for subsequent calls .... $foo=sub{ print qq[subsequent calls\n] # Code for subsequent calls goes here } }; $foo->() for 0..5; # OK - so the subroutine call looks slightly weird +to newbies.
Unfortunately, Murphy's laws will kick in if the caller decides to use a copy/clone of the $foo scalar, so don't do that.

     "Choose a job you like and you will never have to work a day of your life" - Confucius