我正在使用 perl 5.16。
我有以下函数可以给出任何给定数组内的平均值:
sub GetAvgValue {
my @Array = @_;
my $Sum = 0;
foreach my $CurVal (@Array) {
$Sum += $CurVal;
}
if ( scalar(@Array) ) {
return $Sum / scalar(@Array);
}
else {
return undef;
}
}
Run Code Online (Sandbox Code Playgroud)
undef我希望它在数组内没有元素时返回,但它返回一个看起来随机的整数:
print Dumper GetAvgValue([]);
# 1. iteration: $VAR1 = '42311136';
# 2. iteration: $VAR1 = '38006240';
# 3. iteration: $VAR1 = '39394784';
Run Code Online (Sandbox Code Playgroud)
[]是一个数组引用。您没有在代码中使用数组引用。因此,这个子调用是错误的:
GetAvgValue([]);
Run Code Online (Sandbox Code Playgroud)
参数列表@_现在不为空,它包含一个值:一个数组引用。你应该做的是:
GetAvgValue();
Run Code Online (Sandbox Code Playgroud)
发送一个空列表。因为您在子例程内分配数组,如下所示:
my @Array = @_;
Run Code Online (Sandbox Code Playgroud)
如果您使用像[]这样的数组引用,您将这样做:
my $aref = shift; # or
my $aref = $_[0]; # or
my ($aref, @rest) = @_; # etc
my @Array = @$aref; # dereference
Run Code Online (Sandbox Code Playgroud)
末尾的“随机查找值”是数组引用的数字地址,除以 1。演示:
$ perl -lwe'print []'
ARRAY(0x79a7d0)
$ perl -lwe'print []/1'
15443920
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |