我需要快速瞭解哪些子程序被稱爲意大利麪條代碼perl模塊。在Perl中,有沒有辦法讓子程序在被調用時打印其名稱和參數?
我可以編寫一個腳本來遍歷所有模塊,並添加代碼以打印出每個子例程開始時的子例程名稱和參數。
但是有沒有一種方法可以覆蓋內部perl'子程序'機制本身來做到這一點?
代碼在mod_perl下運行,所以我不能輕鬆使用調試器。
我需要快速瞭解哪些子程序被稱爲意大利麪條代碼perl模塊。在Perl中,有沒有辦法讓子程序在被調用時打印其名稱和參數?
我可以編寫一個腳本來遍歷所有模塊,並添加代碼以打印出每個子例程開始時的子例程名稱和參數。
但是有沒有一種方法可以覆蓋內部perl'子程序'機制本身來做到這一點?
代碼在mod_perl下運行,所以我不能輕鬆使用調試器。
你可以使用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();
這將產生類似
[email protected]:~$ perl method_modifiers.pl
Running sub_one(21 12)
I am sub one!
Running sub_two()
Guess who!
請注意,我只是一個初學者,所以要謹慎代碼。
它完美的工作! – 2011-04-21 16:18:48
Devel:Trace將顯示子程序調用和參數。它還會顯示每行執行的代碼,可能比您需要的更冗長。
perl -d:Trace program
Devel::DumpTrace將更加詳細,表示以及變量的值。
我知道你說你「不能輕易使用調試器」因爲你在mod_perl下運行,但也有做一些方案只是說明如下:
http://perl.apache.org/docs/1.0/guide/debug.html#Non_Interactive_Perl_Debugging_under_mod_perl
您可以通過NYTProf運行代碼時,當running under Apache via mod_perl
感謝指針傑韋利::跟蹤和Apache文檔,但使用麋作爲@cnicutar介紹下面是迄今爲止最簡單的方法。 – 2011-04-21 15:37:03