当我这样做时:
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;
}
答案 0 :(得分:4)
get_returns函数返回两个数组的列表。
不,它会返回一些标量。这是sub可以返回的唯一东西。在这种特定情况下,它返回两个对数组的引用。你可以按如下方式抓住它们:
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);
我建议不要这样做。
答案 1 :(得分:1)
根据OP中包含Data::Dumper
输出的评论,您收到$VAR1 = [['e1', 'e2'], ['e1', 'e2']]
。这是一个数组引用数组。以下是如何接收然后取消引用内部arefs:
my ($aref1, $aref2) = get_returns();
# deref and print each element of an array reference
for my $elem (@$aref1){
print "$elem\n";
}
# get a single element
my $x = $aref2->[0];