#! perl use strict; use warnings; use constant { DELAY => 10, EXPIRY => 3600, MARGIN => 300, }; my $time = time; my $expiry = $time + EXPIRY; while ($time + MARGIN < $expiry) { my $previoustime = $time; warn $time; sleep DELAY + $previoustime - $time unless $time - $previoustime >= DELAY; $time = time; }