我正在尝试使用以下perl函数,但我对三点不是很清楚:
sub inittwiddle {
my ($m,$n,$aref) = @_;
my $i;
$$aref[0] = $n+1;
for ($i=1; $i != $n-$m+1; $i++) {
$$aref[$i] = 0;
}
while($i != $n+1) {
$$aref[$i] = $i+$m-$n;
$i++;
}
$$aref[$n+1] = -2;
$$aref[1] = 1 if ( $m == 0 );
}
一、什么是
my ($m,$n,$aref) = @_;
代表?二、如何理解
$$
喜欢的东西$$aref[0] = $n+1;
这个函数被调用为
inittwiddle($M,$N,\@p);
\@p 代表什么?
最佳答案
@_
是传递给函数的参数列表。通过做 my ($m,$n,$aref) = @_;
您正在分配 $_[0]
至 $m
, $_[1]
至 $n
, 和 $_[2]
至 $aref
. $aref
是保存对数组的引用的标量值。要引用数组中的元素,您可以通过 $aref->[0]
访问它们。 (这是更惯用的),或者通过取消引用数组引用。通过添加 @
在前面,您将引用数组(即 @$aref
)。然而,你想要数组中的第一个元素,它是一个标量,所以它是通过 $$aref[0]
获得的。 .添加括号( ${$aref}[0]
)或使用箭头符号( $aref->[0]
)稍微澄清了这一点。 \@p
是对数组 @p
的引用.由于您的函数将标量作为第三个参数,因此您必须传入标量。 \@p
就是这样。当您将数组引用传递给这样的函数时,重要的是要注意对数组的任何更改(例如执行 $$aref[0] = $n+1
)都是对原始数组的更改。如果您想避免这种情况,您可以将数组取消引用为临时数组,可能通过执行 my @tmparr = @$aref;
函数内。 关于perl - 关于现有 perl 子程序的三个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9219643/