This is inferior to Sub::Name for two reasons:
- you have to put the magic line inside the anon sub
- all other anon subs down the call stack are renamed too, which is misleading
use strict;
use warnings;
use Carp;
sub foo {
my $bar = sub {
carp "*** inner anon sub called***";
};
$bar->();
}
sub generate {
my ( $name ) = @_ ;
return sub {
local *__ANON__ = $name
if $name;
carp "***sub called***";
foo();
}
}
sub super {
my $not_named = generate();
$not_named->();
my $named = generate('HulaHoop');
$named->();
}
super();
Still, it's good to know that it's possible to do it in pure perl.