数组 - 如何动态取消引用数组?(Perl)



当我这样做时:

my (@array1, @array2) = get_returns();

get_return函数返回任意元素的列表。在这种特殊情况下,get_returns函数返回两个数组的列表。但是,这会将返回的所有内容存储到array1中,而不是拆分两个数组。

不确定如何使用我调用的函数取消引用数组,例如 @{$arr} .我正在做一种RPC调用形式,其中程序事先不知道返回(及其类型(。我也不想在函数调用之外取消引用数组。是否有动态取消引用数组的解决方法?

更新

get_returns函数中,我正在发送和接收来自服务器的响应。这将返回一个 JSON 表,其中"returns"字段是一个返回数组:

sub get_returns {
    my $data = remotely_call_some_function();
    $t = $json->decode($data);
    my @returns = @{$t->{"returns"}};
    return @returns;
}

get_returns函数返回两个数组的列表。

不,它返回许多标量。这是潜艇唯一能返回的东西。在此特定情况下,它返回对数组的两个引用。您可以按如下方式抓取它们:

my ($array1, $array2) = get_returns();

我也不想在函数之外取消引用数组

为此,您需要在get_returns之外使用命名数组来填充get_returns

sub get_returns {
    my $data_json = remotely_call_some_function();
    my $data = $json->decode($data_json);
    my $returns = $data->{returns};
    @{ $_[0] } = $returns->[0];
    @{ $_[1] } = $returns->[1];
}
get_returns(my @array1, my @array2);

我建议不要这样做。

根据 OP 中包含Data::Dumper输出的注释,您会收到$VAR1 = [['e1', 'e2'], ['e1', 'e2']] .这是一个数组引用数组。以下是接收然后取消引用内部 aref 的方法:

my ($aref1, $aref2) = get_returns();
# deref and print each element of an array reference
for my $elem (@$aref1){
    print "$elemn";
}
# get a single element
my $x = $aref2->[0];

最新更新