use strict; use warnings; my $expiry = time + 3600; my $time; my $previoustime; while ( $time = time and $time + 300 < $expiry and ( $time - $previoustime >= 10 or sleep (10 + $previoustime - $time) ) ) { $previoustime = $time; warn $time; }