2011-04-21 65 views
3

我需要快速瞭解哪些子程序被稱爲意大利麪條代碼perl模塊。在Perl中,有沒有辦法讓子程序在被調用時打印其名稱和參數?

我可以編寫一個腳本來遍歷所有模塊,並添加代碼以打印出每個子例程開始時的子例程名稱和參數。

但是有沒有一種方法可以覆蓋內部perl'子程序'機制本身來做到這一點?

代碼在mod_perl下運行,所以我不能輕鬆使用調試器。

+2

感謝指針傑韋利::跟蹤和Apache文檔,但使用麋作爲@cnicutar介紹下面是迄今爲止最簡單的方法。 – 2011-04-21 15:37:03

回答

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(); 

這將產生類似

[email protected]:~$ perl method_modifiers.pl 
Running sub_one(21 12) 
I am sub one! 
Running sub_two() 
Guess who! 

請注意,我只是一個初學者,所以要謹慎代碼。

+0

它完美的工作! – 2011-04-21 16:18:48

4

Devel:Trace將顯示子程序調用和參數。它還會顯示每行執行的代碼,可能比您需要的更冗長。

perl -d:Trace program 

Devel::DumpTrace將更加詳細,表示以及變量的值

相關問題