#! perl -slw use strict; sub test{ ## create a 'local' sub the first time we're called ## As many as you like each with it's own name *test->{localsub} = sub{ print 'localsub1'; return 12345; } unless exists *test->{localsub}; ## use it *test->{localsub}(); } print test; ## It's not truly local, but no namespace pollution. ## Anyone doing this, is doing it deliberately *test->{localsub}(); __END__ P:\test>test localsub1 12345 localsub1