While reading through
Higher Order Perl, I came across this particular item at the end of Chapter 3, Caching and Memoization:
use Time::HiRes 'time';
my (%time,%calls);
sub profile{
my ($func,$name);
my $stub=sub{
my $start=time;
my $return=$func->(@_);
my $end=time;
my $elapsed=$end-$start;
$calls{$name}+=1;
$time{$name}+=$elapsed;
return $return;
};
}
END{
printf STDERR "%-12s %9s %6s\n","Function","# Calls","Elapsed";
for my $name (sort {$time{$b} <=> $time{$a}} (keys %time)){
printf "%-12s %9d %6.2f\n", $name, $calls{$name},$time{$name};
}
}
My question is how would you actually add this into the code that you wish to profile? Do you add the profile sub to to the program and then call it as neccesary, or work the code that you need to profile into the sub?
TStanley
--------
The only thing necessary for the triumph of evil is for good men to do nothing -- Edmund Burke