Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Profiling code

by TStanley (Canon)
on Nov 21, 2005 at 09:20 UTC ( [id://510398]=perlquestion: print w/replies, xml ) Need Help??

TStanley has asked for the wisdom of the Perl Monks concerning the following question:

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

Replies are listed 'Best First'.
Re: Profiling code
by planetscape (Chancellor) on Nov 21, 2005 at 13:25 UTC
Re: Profiling code
by japhy (Canon) on Nov 21, 2005 at 12:57 UTC
    There appears to be something missing from that code. $func and $name have no means of being populated, and even if they were, nothing gets done with $stub after it's been created. If you change the first line to my ($func, $name) = @_;, then I believe you can change thing_to_profile(@args) to profile(\&thing_to_profile, "thing_to_profile")->(@args) and the code will work as expected.

    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://510398]
Approved by GrandFather
Front-paged by diotalevi
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2024-04-19 05:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found