在Perl中解引用多维数组的正确方法是什么?

时间:2019-02-04 20:11:39

标签: perl multidimensional-array

在我的代码中,我有一个多维数组

       $rows[$x][$y]

我将其传递给具有多种用途的子函数,但在某些时候该函数需要从主数组中移除(弹出)一个元素。

我相信传递它的正确方法是通过引用它,因为我传递的不仅仅是数组:

        filterout(\@rows, $y, $data );

但是我不确定在子例程方面对其进行解引用的语法。

非常感谢您的帮助,谢谢。

2 个答案:

答案 0 :(得分:7)

要从数组引用中pop使用

my $last = pop @$aref;

或者,在最新的Perl版本中,

my $last = pop $aref->@*;

要弹出内部数组,您需要取消引用数组引用的给定元素:

my $last = pop @{ $aref->[$index] };

my $last = pop $aref->[$index]->@*;

答案 1 :(得分:-3)

这是一个数组ref,它指向一个标量数组的数组ref。因此,您将需要为单个元素进行两次取消引用,对于一个列需要一次取消引用,而对于一行则不需要:

sub filterout(\@$$) {
     my($array_ref, $y, $data) = @_;

     # single element <row>,<col>
     $array_ref->[ <row >]->[ <column> ] = ...;

     # pop column of <row>
     pop(@{ $array_ref->[ <row> ] });

     # pop row
     pop(@{ $array_ref });
}

filterout(@rows, $y, $data);

注意原型,它使filterout()push()一样工作。