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); ...