Perl给了我这个:
Use of uninitialized value $k in addition (+) at ./one.pl line 98, <FILE2> line 2000.
代码段如下:
sub calcMu
{
my $sum = 0;
my $lengStrs = length($_[0]);
my $lengArray = @_;
my $k = 0;
my @result = makeDistMatMu(@_);
for $k (@result) {$sum += $k;}
$sum/($lengStrs * ($lengArray*($lengArray-1)/2));
}
在@result中我们有例如(0.1,0.2,0.1,0.4,0.5,0.1)
答案 0 :(得分:4)
@result
包含undef
个值。查看makeDistMatMu
,了解他们如何到达那里。
如果您只想将这些值视为0,则可以将计算$sum
的循环更改为
for $k (@result) {$sum += $k || 0;}
哦,你可以删除$k = 0
行。它没有任何效果,因为循环使用$k
的值覆盖@result
。
答案 1 :(得分:2)
您可以通过跳过@result中的未定义值来避免警告,
for my $k (@result) {
next if not defined $k;
$sum += $k;
}
或使用$k
运算符短路0
和//
for my $k (@result) {
$sum += $k // 0;
# same as:
# $sum += defined $k ? $k : 0;
}