在Perl中初始化数组的困难

Seg*_*las 0 arrays perl hash

我有以下代码:

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}

Que*_*tin 9

$dec_res->{repositories} 显然是一个阵列

事实并非如此.它是一个数组引用.

@repos不是吗?

这是一个数组.

您正在创建一个长度为一项的列表,该项是数组引用.然后,您将列表分配给数组,因此该数组包含该单个项目.

您需要取消引用该数组.

my @repos = @{$dec_res->{repositories}};
Run Code Online (Sandbox Code Playgroud)

perlref解释了有关Perl中引用的更多信息.