our $SLEEP_SECS = 5; # Wake up every 5 seconds. our $GET_TIME_SECS = 2*60; # Resync $time every 2 minutes. my $time = time; my $sleep_count = 0; { ... do stuff that doesn't take too long ... sleep($SLEEP_SECS); if (++$sleep_count * $SLEEP_SECS >= $GET_TIME_SECS) { $time = time; $sleep_count = 0; } else { $time += $SLEEP_SECS; } redo; # loop back to start }