0

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)

4

2 回答 2

4

@result包含undef值。看看makeDistMatMu他们是如何到达那里的。

如果您只想将这些值视为 0,则可以将计算的循环更改$sum

for $k (@result) {$sum += $k || 0;}

哦,你可以删除$k = 0线。它没有任何效果,因为循环$k用来自@result.

于 2013-05-23T07:58:59.067 回答
2

您可以通过跳过@result 中未定义的值来避免警告,

for my $k (@result) {
  next if not defined $k;

  $sum += $k;
}

或通过短路$k0使用//操作员

for my $k (@result) {

  $sum += $k // 0;

  # same as:
  # $sum += defined $k ? $k : 0;
}
于 2013-05-23T08:08:48.773 回答