Here's a way that avoids re-creating the local sub every invocation of the main, and avoids namespace pollution in main. It also allows as many (named) "local" subs as required.
#! 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
Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon