Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

benchmarking code conditionally

by punkish (Priest)
on Feb 24, 2011 at 02:56 UTC ( #889896=perlquestion: print w/replies, xml ) Need Help??
punkish has asked for the wisdom of the Perl Monks concerning the following question:

I tend to do a lot of

sub foo { my $t0 = Benchmark->new(); .. code .. my $t1 = Benchmark->new(); say "foo() took" . timestr(timediff($t1, $t0)); } sub bar { my $t0 = Benchmark->new(); .. code .. my $t1 = Benchmark->new(); say "bar() took" . timestr(timediff($t1, $t0)); }

What I really want is all that Benchmark-ing to be switchable. So, if I have a config switch $BENCHMARKIT = 1;, all that Benchmark nonsense should run, including printing out the messages. However, if I turn it off with $BENCHMARKIT = 0;, then it should all be skipped.

How do I go about accomplishing the above?

New note: I have now deployed Log::Dispatch to do my logging to file or screen or both, replacing my code below. Still seeking wisdom for the benchmarking query above.

Additional note: Fwiw, I do something similar with my homemade debugging. Instead of

sub foo { say "Starting foo() with yadda"; .. code .. say "Now doing stuff"; .. code .. say "Now munging"; say "Done with foo()"; }

I do something like so

my $DEBUG = 1; sub foo { logit "Starting foo() with yadda"; .. code .. logit "Now doing stuff"; .. code .. logit "Now munging"; logit "Done with foo()"; } sub logit { my ($msg) = @_; if ($DEBUG) { say $msg; } }

when small people start casting long shadows, it is time to go to bed

Replies are listed 'Best First'.
Re: benchmarking code conditionally
by SimonClinch (Deacon) on Feb 24, 2011 at 14:36 UTC
    use BenchWrapper; my $BENCHMARKIT = 1; ... my $bwo = BenchWrapper -> new( $BENCHMARKIT ); ... sub foo { my $t0 = $bwo -> mark; ... my $t1 = $bwo -> mark; ... } ... package BenchWrapper; use Benchmark; sub new { bless { BENCHMARKIT => shift() }; } sub mark { $_[0] -> { BENCHMARKIT } and return Benchmark -> new; } 1;

    One world, one people

Re: benchmarking code conditionally
by Anonymous Monk on Feb 24, 2011 at 14:54 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://889896]
Approved by broomduster
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2017-02-27 10:31 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (380 votes). Check out past polls.