use strict; use warnings; use Time::HiRes ; my $secs_old = 1; my $usecs_old = 0.000001; my $sleep_amt = 1; for (1..100_000){ my ($secs_new, $usecs_new) = Time::HiRes::gettimeofday(); my $secs_diff = $secs_new - $secs_old - $sleep_amt; my $usecs_diff = $usecs_new - $usecs_old; $usecs_diff = $usecs_diff / 1000; print "[$secs_diff] [$usecs_diff]\n"; $secs_old = $secs_new; $usecs_old = $usecs_new; #Time::HiRes::usleep(1_000_000); #I found usleep tends to have even less accurate results than the builtin sleep function... sleep $sleep_amt; } __END__ [0] [0] [0] [15.625] [0] [0] .... [0] [0] [0] [15.625] [0] [0] [0] [0] [0] [0] [0] [0] [0] [265.625] [0] [0] [0] [0] ... etc