Chapter 40. Benchmarking

brian d foy

Perl’s motto is “There Is More Than One Way To Do It.” Some ways are easy to read, some are fast, and some are just plain incomprehensible. Often I’ll need to know how long it takes for my program to execute, and I’ll use the Benchmark module to find out. The Benchmark module comes with the standard Perl distribution and is written completely in Perl, so you can use it right away.

The Trouble with time( )

Before I discuss the Benchmark module, let’s examine what’s involved in timing an event. I need to know when the event started and when the event ended. Once I have those details, timing the event is a simple matter of subtraction.

If I want to time one of my programs, I could use my stopwatch to figure out how long it takes to execute. If the program takes more than several seconds, I might actually be able to do that. However, I don’t need my watch, since Perl already provides a way to do this with the built-in time function, which returns the system time. I can record the system time twice and take the difference:

	my $start_time = time;

	# My code here

	my $end_time = time;



	my $difference = $end_time - $start_time;

	print "My code took $difference seconds.\n";

Since time returns an integral number of seconds, this method can only record times and differences with one-second precision. That might be too coarse a granularity for the really fast code that I’ve written. Also, the CPU works on other things before it finishes my program, so the stopwatch ...

Get Computer Science & Perl Programming 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.