use Time::Hires qw(time usleep); while(1) { my $now = time; my $next = int($now+1); usleep $next-$now; foo; bar; # your work here! }