phpman > perldoc > Time::Stopwatch(3pm)

Markdown | JSON | MCP    

NAME
    Time::Stopwatch - Use tied scalars as timers

SYNOPSIS
        use Time::Stopwatch;
        tie my $timer, 'Time::Stopwatch';

        do_something();
        print "Did something in $timer seconds.\n";

        my @times = map {
            $timer = 0;
            do_something_else();
            $timer;
        } 1 .. 5;

DESCRIPTION
    The Time::Stopwatch module provides a convenient interface to timing functions through tied
    scalars. From the point of view of the user, scalars tied to the module simply increase their
    value by one every second.

    Using the module should mostly be obvious from the synopsis. You can provide an initial value
    for the timers either by assigning to them or by passing the value as a third argument to tie().

    If you have the module Time::HiRes installed, the timers created by Time::Stopwatch will
    automatically count fractional seconds. Do *not* assume that the values of the timers are always
    integers. You may test the constant "Time::Stopwatch::HIRES" to find out whether high resolution
    timing is enabled.

  A note on timing short intervals
    Time::Stopwatch is primarily designed for timing moderately long intervals (i.e. several
    seconds), where the overhead imposed by the tie() interface does not matter. With Time::HiRes
    installed, it can nonetheless be used for even microsecond timing, provided that appropriate
    care is taken.

    *   Explicitly initialize the timer by assignment. The first measurement taken before resetting
        the timer will be a few microseconds longer due to the overhead of the tie() call.

    *   Always subtract the overhead of the timing code. This is true in general even if you're not
        using Time::Stopwatch. (High-level benchmarking tools like Benchmark.pm do this
        automatically.) See the code example below.

    *   Take as many measurements as you can to minimize random errors. The Statistics::Descriptive
        module may be useful for analyzing the data. This advice is also true for all benchmarking.

    *   Remember that a benchmark measures the time take to run the benchmark. Any generalizations
        to real applications may or may not be valid. If you want real world data, profile the real
        code in real use.

    The following sample code should give a relatively reasonable measurement of a the time taken by
    a short operation:

        use Time::HiRes;  # high resolution timing required
        use Time::Stopwatch;

        use Statistics::Descriptive;
        my $stat = Statistics::Descriptive::Sparse->new();

        tie my $time, 'Time::Stopwatch';  # code timer
        tie my $wait, 'Time::Stopwatch';  # loop timer

        while ($wait < 60) {  # run for one minute
            my $diff = 0;
            $time = 0; do_whatever(); $diff += $time;
            $time = 0;                $diff -= $time;
            $stat->add_data($diff);
        }

        print("count: ", $stat->count(), " iterations\n",
              "mean:  ", $stat->mean(), " seconds\n",
              "s.d.:  ", $stat->standard_deviation(), " seconds\n");

    Note that the above code includes the time of the subroutine call in the measurement.

BUGS
    Since tied scalars do not (yet?) support atomic modification, use of operators like "$t++" or
    "$t *= 2" on timers will cause them to lose the time it takes to fetch, modify and store the
    value. I *might* be able to get around this by overloading the return value of "FETCH", but I
    doubt if it's worth the trouble. Just don't do that.

    There is no way to force low-resolution timing if Time::HiRes has been installed. I'm not sure
    why anyone would want to, since int() will do just fine if you want whole seconds, but still..

CHANGE LOG
    1.00 (15 Mar 2001)
        Explicitly localized $SIG{__DIE__} when testing for Time::HiRes availability. Added "A note
        on timing short intervals" to the POD documentation. Bumped version to 1, no longer beta.

    0.03 (27 Feb 2001)
        Modified tests to give more information, reduced subsecond accuracy test to 1/10 seconds to
        allow for inaccurate select() implementations. Tweaked synopsis and README.

SEE ALSO
    Time::HiRes, "tie" in perlfunc

    For a higher-level approach to timing, try (among others) the modules Time::SoFar, Devel::Timer,
    or Benchmark. Also see the profiling modules Devel::DProf, Devel::SmallProf and Devel::OpProf.

AUTHORS
    Copyright 2000-2001, Ilmari Karonen. All rights reserved.

    This library is free software; you can redistribute it and/or modify it under the same terms as
    Perl itself.

    Address bug reports and comments to: perl AT itz.fi

Time::Stopwatch(3pm)
NAME SYNOPSIS DESCRIPTION BUGS CHANGE LOG SEE ALSO AUTHORS

Generated by phpman v3.7.12 Author: Che Dong Under GNU General Public License
2026-06-13 22:37 @216.73.216.200
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 TransitionalValid CSS!

^_back to top