2011-04-21 5 views
3

스파게티 코드 펄 모듈의 엉망으로 어떤 서브 루틴이 호출되는지 빨리 이해할 필요가 있습니다.펄에서는 서브 루틴이 호출 될 때 이름과 인자를 출력하는 방법이 있습니까?

모든 모듈을 거쳐 모든 서브 루틴의 시작 부분에 서브 루틴 이름과 인수를 인쇄하는 코드를 추가하는 스크립트를 작성할 수 있습니다.

하지만 내부 펄 그룹의 서브 루틴 메커니즘을 재정 의하여이 작업을 수행 할 수 있습니까?

코드가 mod_perl에서 실행되므로 디버거를 쉽게 사용할 수 없습니다.

+2

감사합니다. –

답변

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

완벽하게 작동합니다! –

4

Devel:Trace은 서브 루틴 호출 및 인수를 표시합니다. 또한 실행되는 모든 코드 줄을 표시하므로 필요한 것보다 자세하게 표시 될 수 있습니다.

perl -d:Trace program 

Devel::DumpTrace뿐만 아니라 변수의 값 를 나타내는 더욱 상세한 것.

2

당신은 NYTProf를 통해 코드를 실행할 수 있습니다 때 때 (STABLE)에 대한 포인터 :: 추적 및 아파치 문서,하지만 @cnicutar 아래 설명 훨씬 쉬운 방법으로 무스를 사용하는 running under Apache via mod_perl