Penso di aver risolto facendo così:
codice:
#!/usr/bin/perl
use strict;
use warnings;
use lib 'lib';
use Net::NTP;
use Data::Dumper;
my $time = &_get_ntp_time();
my $k = 0;
while (1)
{
sleep 5;
$k = $k + 5;
my @time = localtime $time + $k;
print sprintf('%04d/%02d/%02d %02d:%02d:%02d',1900+$time[5], ++$time[4],@time[3, 2, 1, 0]), " - $k \n";
$time = &_get_ntp_time() and $k = 0 if $k > (60 * 2);
}
sub _get_ntp_time
{
my %ntp_data = get_ntp_response('time.ien.it');
return $ntp_data{'Reference Timestamp'};
}
In pratica mi collego al server NTP ogni 2 minuti per ri-sincronizzare ... dato che tutto quello che viene eseguito internamente al ciclo potrebbe più la sleep potrebbe portare ad un falso time...