use Time::Local; # sleep a while until the mail server comes back up my @later_bits = (localtime)[0..5]; @later_bits[2,1] = (8, 15); # 08:15 my $later = timelocal( @later_bits ); my $duration = $later > $now ? $later - $now : 0; sleep $duration;