我的 Perl 代码包含许多对象,例如
$wprAtnA
和
$wprAtnB
下面,子例程是用一组参数指定的。
其他代码,给定“wprAtn”,将“wprAtn”应用于某个对象。
即调用指定的sub。
一旦定义了“wprAtn”, 能够审查它,看看它的组成部分会很方便, 包括哪个子是已经指定的。 但正如我们在下面看到的,我的
Dumper
命令没有给我们这些信息。
print
也没有。
给定子例程的引用,有没有办法恢复它的名称或至少它的源代码, 这样使用代码的人、调试代码的人就可以从“wprAtn”中识别出子程序?
#!/usr/bin/env perl
use strict; use warnings;
use feature 'say';
use Data::Dumper qw(Dumper); $Data::Dumper::Sortkeys = 1;
sub dog
{
say 'we are in ',[caller(0)]->[3],;
return 1;
}
sub feline
{
die;
}
my$wprAtnA=
{
code=>\&dog,
arg =>
{
x=>5,
}
};
my$wprAtnB=
{
code=>\&feline,
arg =>
{
verbose=>0,
text=>'why?',
}
};
say $wprAtnA->{code};
print Dumper $wprAtnA;
say $wprAtnB->{code};
print Dumper $wprAtnB;
我在这里运行它
> perl d.pl
CODE(0x7f96dc80e948)
$VAR1 = {
'arg' => {
'x' => 5
},
'code' => sub { "DUMMY" }
};
CODE(0x7f96db853a80)
$VAR1 = {
'arg' => {
'text' => 'why?',
'verbose' => 0
},
'code' => sub { "DUMMY" }
};
您可以将 Deparse 设置为 true 以在输出中查看解析后的代码。
$Data::Dumper::Deparse = 1;