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.