我有以下代码:
print Dumper($dec_res->{repositories}[0]);
print Dumper($dec_res->{repositories}[1]);
my @repos = ($dec_res->{repositories});
print scalar @repos . "\n";
Run Code Online (Sandbox Code Playgroud)
输出如下:
$VAR1 = {
'status' => 'OK',
'name' => 'apir',
'svnUrl' => 'https://url.whatever/svn/apir',
'id' => 39,
'viewvcUrl' => 'https://url.whatever/viewvc/apir/'
};
$VAR1 = {
'status' => 'OK',
'name' => 'CCDS',
'svnUrl' => 'https://url.whatever/svn/CCDS',
'id' => 26,
'viewvcUrl' => 'https://url.whatever/viewvc/CCDS/'
};
1
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么$dec_res->{repositories}显然是阵列但@repos不是?
在这里我打印了大小,但即使尝试访问元素$repos[0]仍然返回错误.
倾销$repos[0]实际上打印整个结构...像倾倒$dec_res->{repositories}
$dec_res->{repositories}显然是一个阵列
事实并非如此.它是一个数组引用.
但
@repos不是吗?
这是一个数组.
您正在创建一个长度为一项的列表,该项是数组引用.然后,您将列表分配给数组,因此该数组包含该单个项目.
您需要取消引用该数组.
my @repos = @{$dec_res->{repositories}};
Run Code Online (Sandbox Code Playgroud)
perlref解释了有关Perl中引用的更多信息.