簡體   English   中英

如何在帶有傳遞引用的子例程中使用PDL rcol?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM