my $n = 0 ;
my $s = $p ;
my $l ;
do {
if ($l = unpack("\@$p C", $response)) { $n++ ; } ;
$p += $l + 1 ;
} while ($l) ;
####
my ( ...., @labels, undef, $type, $class, ...) = unpack(".... (C/a*)$n C n n ....") ;
####
($name, $p) = extract_name($response, $p) ;
....
sub extract_name {
my ($response, $p) = @_ ;
my $extracted ...
....
return ($extracted, $p) ;
} ;
####
sub extract_name {
my ($response, $p) = @_ ;
my $extracted ...
....
$_[1] = $p ; # $_[1] is implicitly a reference to the 2nd actual argument
return $extracted ;
} ;