Benchmark
use Benchmark qw(timethese cmpthese timeit countit timestr); # You can always pass in code as strings: timethese $count, { 'Name1' => '…code1…', 'Name2' => '…code2…', }; # Or as subroutines references: timethese $count, { 'Name1' => sub { …code1… }, 'Name2' => sub { …code2… }, }; cmpthese $count, { 'Name1' => '…code1…', 'Name2' => '…code2…', }; $t = timeit $count, '…code…'; print "$count loops of code took:", timestr($t), "\n"; $t = countit $time, '…code…'; $count = $t->iters; print "$count loops of code took:", timestr($t), "\n";
The Benchmark
module can help you
determine which of several possible choices executes the fastest. The
timethese
function runs the specified code segments
the number of times requested and reports back how long each segment
took. You can get a nicely sorted comparison chart if you call
cmpthese
the same way.
Code segments may be given as function references instead of strings (in fact, they must be if you use lexical variables from the calling scope), but call overhead can influence the timings. If you don't ask for enough iterations to get a good timing, the function emits a warning.
Lower-level interfaces are available that run just one piece of
code either for some number of iterations (timeit
)
or for some number of seconds (countit
). These
functions return Benchmark
objects (see the online
documentation for a description). With countit
, you
know it will run in enough time to avoid warnings, because you
specified a minimum run time.
To get the ...
Get Programming Perl, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.