当我这样做时:
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];