coderef から名前を取りたいとき

coderef から名前を取りたいなーって時がごく稀にあるわけですが、そういうときにどうするかという話。
anon のやつは __ANON__ になる。

perl 5.12.0 からは B でとれるけど、それ以前の場合は使えないので、Devel::Peek 使っとけばいいっぽい。
気のせいで、むかしから B::svref_2object($coderef)->GV->NAME; できるんですってよ!!

追記: ATTRIBUTE のなかだと動かないので、Attribute::Handler を使うか、Test::Attribute::AutoLevel の 0.03 移行でやってるアプローチを取る必要がある。

use B;
use CGI;
my $coderef = \&CGI::new;
my $funcname = B::svref_2object($coderef)->GV->NAME;
use Devel::Peek;
use CGI;
my $coderef = \&CGI::new;
my ($funcname) = Devel::Peek::CvGV($coderef) =~ /::(.*)$/;

とかなんとか