我需要快速了解在一堆意大利面条代码perl模块中调用哪些子程序。
我可以编写一个脚本来遍历所有模块并添加代码以在每个子例程的开头打印出子例程名称和参数。
但有没有办法覆盖内部perl'子程序'机制本身呢?
代码在mod_perl下运行,所以我不能轻易使用调试器。
答案 0 :(得分:4)
Devel:Trace将显示子程序调用和参数。它还将显示执行的每一行代码,这可能比您需要的更详细。
perl -d:Trace program
Devel::DumpTrace会更加冗长,也会显示变量的值。
答案 1 :(得分:4)
您可以使用 Moose::MethodModifiers
。我对Moose
了解不多,但从手册中我可以看到你可以做到。到此为止。
#!/usr/bin/perl -w
use 5.010;
use strict;
use Moose;
sub sub_one {
say "I am sub one!";
}
sub sub_two {
say "Guess who!";
}
# Note that the name of the function being modified isn't passed in in
# any way
for my $func qw(sub_one sub_two) {
around $func => sub {
my $orig = shift;
say "Running ${func}(@_)";
# call the original sub
my $self = shift;
$self->$orig(@_);
}
}
sub_one(21, 12);
sub_two();
这会产生类似
的东西cnicutar@aiur:~$ perl method_modifiers.pl
Running sub_one(21 12)
I am sub one!
Running sub_two()
Guess who!
请注意我只是一个初学者,所以要对这段代码保持谨慎。
答案 2 :(得分:2)
答案 3 :(得分:1)
我知道你说你“不能轻易使用调试器”,因为你在mod_perl下运行,但是有一些选项可以做到这里描述的那样:
http://perl.apache.org/docs/1.0/guide/debug.html#Non_Interactive_Perl_Debugging_under_mod_perl