在perl中排序后变量类型的变化

时间:2014-01-07 10:02:44

标签: arrays perl

我有以下代码:

my $decoded_json = decode_json($result);
print Dumper($decoded_json);

输出是这样的:

$VAR1 = {
      'searchLogMessages' => [],
      'startToken' => '',
      'documents' => [
                       {
                         'status' => 'Open',
                         'inheritedLabels' => [],
                         'aliases' => [
                                        {
                                          'precedence' => '2013-07-31T07:37:14.071Z',
                                          'id' => 'abc'
                                        }
                                      ],
                         'title' => '[DE] Add Category Specific Example Tab',
                        }
                     ],
      'totalNumberFound' => 1
    };

我想访问document->aliases->id

foreach my $issue (@{$decoded_json->{documents}}) {
    my @aliases_arr = sort {$b->{precedence} cmp $a->{precedence}} $issue->{aliases};
    print ref($issue->{aliases}), "\n";    #prints "ARRAY"
    print $issue->{aliases}[0]->{id}, "\n";   #prints "abc"
    print ref($aliases_arr[0]), "\n";   #prints "ARRAY"

}

为什么$aliases_arr[0]属于数组类型。

1 个答案:

答案 0 :(得分:4)

$issue->{aliases}不是数组,而是数组引用。由于sort需要一个列表(此处包含单个数组引用),因此您的代码不起作用且@aliases_arr仅包含单个数组引用,这与$issue->{aliases}相同。

你必须取消引用它:

my @aliases_arr = sort { $b->{precedence} cmp $a->{precedence} } @{$issue->{aliases}};

现在一切都应该工作了,print ref($aliases_arr[0])给了HASH