如何确定Perl代码引用的子例程名称?我也想区分命名和匿名子程序。
感谢this question我知道如何打印代码,但我仍然不知道如何得到这个名字。
例如,我想从以下内容获得“inigo_montoya”:
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; $Data::Dumper::Deparse = 1; my $sub_ref = \&inigo_montoya; print Dumper $sub_ref; # === subroutines === sub inigo_montoya { print <<end_quote; I will go up to the six-fingered man and say,"Hello. My name is Inigo Montoya. You killed my father. Prepare to die."'; end_quote }
解决方法
为什么不问,编译器看到什么? (它将返回__ANON__在匿名subs上)。
#!/usr/bin/perl use strict; use warnings; my $sub_ref = \&inigo_montoya; use B qw(svref_2object); my $cv = svref_2object ( $sub_ref ); my $gv = $cv->GV; print "name: " . $gv->NAME . "\n"; sub inigo_montoya { print "...\n"; }