具体来说,我想使用带有PERLCOLS选项的rcols .
这就是我想要做的事情:
my @array;
getColumn(\@array, $file, 4); # get the fourth column from file
如果我使用 \@array
,我可以这样做,但为了向后兼容,我使用array-ref-ref来做到这一点:
sub getColumn {
my ($arefref, $file, $colNum) = @_;
my @read = rcols $file, { PERLCOLS => [$colNum] };
$$arefref = $read[-1];
return;
}
但是,我没有看到如何制作一个子程序,它将数组引用作为一个参数,而不是像 @$aref = @{$read[-1]}
这样的东西,它们会单独复制每个元素 .
PS:阅读 PDL::IO::Misc
documentation,似乎perl数组应该是 $read[0]
,但事实并非如此 .
PERLCOLS - 一组列号,它们将被读入perl数组而不是piddles . 在显式列之后将返回未在要显示的显式列列表中指定的任何列 . (默认B) .
我正在使用PDL v2.4.4_05和为x86_64-linux-thread-multi构建的Perl v5.10.0
2 回答
我不明白为什么这不起作用:
查看
rcols()
文档,看起来如果添加PERLCOLS
选项,它会返回您作为数组引用请求的任何列,因此您应该能够将它分配给您传入的数组引用 .至于文档问题,我从中理解的是你没有指定任何显式列,因此
rcols()
将首先返回文件中的所有列作为PDL,然后返回您请求的列作为Perl arrayrefs,这是为什么你的arrayref出现在$read[-1]
.我认为在这里使用
rcols
的部分困难在于用户正在运行PDL-2.4.4而rcols
docs版本来自PDL-2.4.7,其可能在功能上存在版本偏差 . 使用当前的PDL-2.4.10版本,很容易使用rcols
将单个数据列作为perl数组读入,该数组通过arrayref返回:请注意,在当前版本中,
perlcols
选项允许指定列的输出类型,而不是仅在末尾添加perl样式的列 .在PDL shell中使用
pdldoc rcols
或执行help rcols
以查看更多文档 . perldl mailing list是一个很好的资源 .