在我的代码中,我有一个多维数组
$rows[$x][$y]
我将其传递给具有多种用途的子函数,但在某些时候该函数需要从主数组中移除(弹出)一个元素。
我相信传递它的正确方法是通过引用它,因为我传递的不仅仅是数组:
filterout(\@rows, $y, $data );
但是我不确定在子例程方面对其进行解引用的语法。
非常感谢您的帮助,谢谢。
答案 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()
一样工作。