my $server_root_dispersion_binary = substr($received_data, 64, 32);
my $server_root_dispersion = oct("0b".$server_root_dispersion_binary);
####
my $server_root_dispersion = oct("0b" . substr($received_data, 64, 32));
####
my $server_precision = oct("0b" . substr($received_data, 24, 8));
my $server_root_delay = oct("0b" . substr($received_data, 32, 32));
####
my $server_precision = oct("0b" . substr($received_data, 24, 8));
my $server_root_delay = oct("0b" . substr($received_data, 24+8, 32));
####
my $server_precision = oct("0b" . substr($received_data, $here, ($width = 8)));
$here += $width;
my $server_root_delay = oct("0b" . substr($received_data, $here, ($width = 32)));
$here += $width;
####
if ($received_data) {
my $here = 0;
my $next_value = sub {
my $width = shift;
my $start = $here;
$here += $width;
return oct("0b".substr($received_data, $start, $width));
};
my $server_li = $next_value->(2);
my $server_vn = $next_value->(3);
my $server_mode = $next_value->(3);
my $server_stratum = $next_value->(8);
...
####
if ($received_data) {
my $here = 0;
my ($server_li, $server_vn, $server_mode, $server_stratum, ... ) =
map {
my $start = $here;
$here += $_;
return oct("0b".substr($received_data, $start, $_));
}
(2, 3, 3, 8, ... )
####
my ($server_li, $server_vn, $server_mode, $server_stratum, ... )
map { oct("0b".$_) } unpack 'a2a3a3a8...', $received_data
####
our (@fields, %width, $packt);
{
my @f = (
# list of field names and widths in the order in which they appear
li => 2,
vn => 3,
mode => 3,
(map {$_ => 8} qw(stratum poll_interval precision)),
(map {$_ => 32} qw(root_delay dispersion identifier)),
(map {$_ => 64} qw(ref_epoch originate_epoch receive_epoch transmit_epoch))
);
@fields = map {$f[$_*2]} (0 .. @f/2);
%width = (@f);
$packt = join '', map {"a$width{$_}"} @fields;
}
...
%srv = ();
@srv{@fields} = map { oct("0b".$_) } unpack $packt, $received_data;