我写了以下Perl函数
sub Outputing
{
my $featureMatrix = shift;
my $indexRow = shift;
my $fileName = "/projectworkspace/input.dat";
open(DATA, "> $fileName");
printf DATA "%d", $#$indexRow;
print DATA "\n";
my $numDataPoints = $#{$featureMatrix{$indexRow->[1]}};
printf DATA "%d", $numDataPoints;
print DATA "\n";
close DATA;
}
我按如下方式调用输出:
Outputing($matrix, $Rows);e
$ matrix是数组的哈希值,其结构类似于
my $matrix
= { 200 => [ 0.023, 0.035, 0.026 ],
110 => [ 0.012, 0.020, 0,033],
};
Rows是一个存储矩阵排序键的数组,如下所示
my @Rows = sort keys %matrix;
矩阵和行都用作传递给输出的参数。
打印出来的$ numDataPoints是-1,这是不正确的?我不知道导致这个问题的原因可能是哪个?如果我们使用上面的例子,并假设$ indexRow-> [1] = 110,那么$ numDataPoints应该是2.我不确定$#{$featureMatrix{$indexRow->[1]}};
是否是获得此数组大小的正确方法。
答案 0 :(得分:3)
假设您已包含所有相关代码,请执行以下操作:
my @indexRow = sort keys %featureMatrix;
应该是这样的:
my @indexRow = sort keys %$featureMatrix;
和此:
my $numDataPoints = $#{$featureMatrix{$indexRow->[1]}};
应该是这样的:
my $numDataPoints = $#{$featureMatrix->{$indexRow->[1]}};
也就是说,问题在于,在某些地方,您使用的是名为%featureMatrix
的哈希,而在其他地方,您使用的是名为$featureMatrix
的哈希引用,它引用了匿名哈希。
您应该使用use warnings
和use strict
来防止此类错误:当您只声明%featureMatrix
时,这些错误会阻止您使用$featureMatrix
。 (实际上,use warnings
在这种情况下可能没有帮助 - 它可以检测您是否只使用了%featureMatrix
一次,但在您的情况下,您使用了几次 - 但use strict
几乎可以肯定有帮助。)