각 서브 루틴에 대해 R, 데이터베이스, Excel 또는 유사한 항목 (CSV가 좋은 선택 일 수 있음)으로 내보낼 수있는 형식으로 시간을보고하는 랩퍼를 작성하십시오. 이런 식으로 코드에 추가하십시오. 5.7 이하의 Perl을 사용하는 경우 (Time :: HiRes가 처음 코어에 추가되었을 때) 아래의 Time :: HiRes 함수 대신 위에 언급 한대로 syscall을 사용하십시오.
INIT {
sub wrap_sub {
no strict 'refs';
my $sub = shift;
my $subref = *{$sub}{CODE};
return sub {
local *__ANON__ = "wrapped_$sub";
my $fsecs = Time::HiRes::gettimeofday();
print STDERR "$sub,$fsecs,";
if (wantarray) {
@return = eval { $subref->(@_) } or die [email protected];
} else {
$return[0] = eval { $subref->(@_) } or die [email protected];
}
$fsecs = Time::HiRes::gettimeofday();
print STDERR "$fsecs\n";
return wantarray ? @return : $return[0];
};
}
require Time::HiRes;
my @subs = qw{the subs you want to profile};
no strict 'refs';
no warnings 'redefine';
foreach my $sub (@subs) {
*{$sub} = wrap_sub($sub);
}
}
당신이 윤곽을 필요로하는 서브 우퍼와 '프로파일 링 할 잠수정'을 교체하고, 마음에 베어링이 실행의 결과를 얻을 수 있습니다해야하는 경우 개방() ED 파일 대신 STDERR의 처리 사용 (유닉스에서 bourne, korn 및 bash 쉘을 사용하는) 스크립트의 출력과는 별도입니다.
perl ./myscript.pl 2>myscript.profile
출처
2010-05-04 06:26:33
MkV
@FM : 좋은 생각입니다.하지만 그것에 대해 생각해 봐야합니다. 그들은 내가 할 수있는 한 천 번 이상 잘 돌아갈 것입니다 (코드는 엉망입니다). 문제는 이러한 잠수정과 그 점수가 상호 연결되어 있다는 것입니다. – Zaid
글쎄, 당신은 모듈이하는 것과 똑같은 일을합니다. 그들의 근원을보십시오. –
Time :: HiRes에 액세스 할 수 없습니까? Perl 5.6을 사용하고 있습니까? 그 후 Perl과 함께 설치된 모듈의 일부였습니다. – MkV