Don't sleep FOR one second, sleep until the NEXT second.
#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11111868
use warnings;
use Time::HiRes qw( time sleep );
while(1)
{
my $nextsecond = int time + 1;
sleep $nextsecond - time;
print time, "\n";
}
Outputs:
1579965143.0001
1579965144.00009
1579965145.00009
1579965146.00009
1579965147.0001
1579965148.0001
1579965149.00009
1579965150.0001
1579965151.0001
1579965152.00009
1579965153.00009
1579965154.0001
1579965155.00009
1579965156.00009
1579965157.00009
...