Perl给出:“在./one.pl第98行使用未初始化的值$ k另外(+)”

时间:2013-05-23 07:53:18

标签: perl

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)

2 个答案:

答案 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;
}