В частности, я хочу использовать протоколы с параметром 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;
}
Но я не вижу, как создать подпрограмму, которая принимает в качестве аргумента массив ref, не говоря что-то вроде @$aref = @{$read[-1]}
, который, на самом деле, копирует каждый элемент индивидуально.
PS: читая документацию PDL::IO::Misc
, кажется, что массив perl должен быть $read[0]
, но это не так.
PERLCOLS - массив номеров столбцов, которые должны считываться в массивы perl, а не в piddles.Любые столбцы, не указанные в явном списке столбцов для чтения, будут возвращены после явных столбцов.(по умолчанию B).
Я использую PDL v2.4.4_05 с Perl v5.10.0, созданным для x86_64-linux-thread-multi