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) =~ /::(.*)$/;
とかなんとか