use strict; use warnings; my $expiry = time + 3600; my $time = time; sub sleepy { my $oldtime = pop; my $newtime = time; my $diff = $newtime - $oldtime; sleep 10 - $diff if $diff < 10; return 1; } while ( (sleepy $time) and $time + 300 < $expiry ) { $time = time; warn $time; }