You can also name the subroutine by using Sub::Name:
use Carp;
use Sub::Name;
subname(
my_anonymous_sub => sub {
croak("Whee!");
}
)->();
__END__
Whee! at - line 6
main::my_anonymous_sub() called at - line 8
The benefit of this is that you don't name all anonymous subroutines that are called inside this anonymous subroutine.
use Carp;
use Sub::Name;
subname(
my_anonymous_sub => sub {
sub {
carp("subname");
}->()
}
)->();
sub {
local *__ANON__ = 'my_anonymous_sub';
sub {
carp("*__ANON__");
}->()
}->();
__END__
subname at - line 7
main::__ANON__() called at - line 8
main::my_anonymous_sub() called at - line 10
*__ANON__ at - line 15
main::my_anonymous_sub() called at - line 16
main::my_anonymous_sub() called at - line 17
lodin