sub do_request { use Time::HiRes qw[sleep time]; use 5.010; state $sleep = [0, 0, 0]; my $url = shift; while ($$sleep[0] + 1 > time) { # Loop, as sleep() may get interrupted. sleep time - $$sleep[0] + 1; } $sleep = [@$sleep [1 .. $#$sleep], time]; ... fetch from server ... }