use Time::HiRes qw( time sleep ); # Optional sub sleep_until { my ($e_time) = @_; for (;;) { my $dur = $e_time - time; last if $dur <= 0; sleep($dur); } } my @mesages = (...); my $s_time = time; for my $i (@messages) { sleep_until($s_time + 5*$i); print($message); }