[英]How can I use PDL rcols in a subroutine with pass-by-reference?
具體來說,我想將rcols與PERLCOLS選項一起使用。
這是我想做的:
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
文檔 ,似乎perl數組應該是$read[0]
但不是。
PERLCOLS-一個列號數組,該列號將被讀入perl數組而不是小數。 在要讀取的列的顯式列表中未指定的任何列都將在顯式列之后返回。 (默認B)。
我正在將PDL v2.4.4_05與為x86_64-linux-thread-multi構建的Perl v5.10.0一起使用
我相信在這里使用rcols
部分困難在於,用戶正在運行PDL-2.4.4,而rcols
docs版本來自PDL-2.4.7,其功能可能存在版本偏差。 在當前的PDL-2.4.10版本中,可以很容易地使用rcols
讀取作為perl數組的單列數據,該數組通過arrayref返回:
pdl> # cat data
1 2 3 4
1 2 3 4
1 2 3 4
pdl> $col = rcols 'data', 2, { perlcols=>[2] }
ARRAY(0x2916e60)
pdl> @{$col}
3 3 3
請注意,在當前版本中, perlcols
選項允許您指定列的輸出類型,而不僅僅是在末尾添加perl樣式的列。
在PDL Shell中使用pdldoc rcols
或做help rcols
可以查看更多文檔。 一個好的資源是perldl郵件列表 。
我不明白為什么這行不通:
my $arr_ref;
getColumn( $arr_ref, $file, 4 );
sub getColumn {
my ( $arr_ref, $file, $colNum ) = @_;
my @read = rcols, $file, { PERLCOLS => [ $colNum ] };
# At this point, @read is a list of PDLs and array references.
$arr_ref = $read[-1];
}
查看rcols()
文檔,看起來好像如果添加PERLCOLS
選項,它將返回您請求的任何列作為數組引用,因此您應該能夠將其分配給傳入的數組引用。
至於文檔問題,據我了解,您還沒有指定任何顯式列,因此rcols()
將首先以PDL形式返回文件中的所有列,然后以Perl arrayrefs的形式返回您請求的列,這就是為什么arrayref在$read[-1]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.