首页 > 解决方案 > Perl Hash 不同类型的值

问题描述

我有一个哈希。我需要访问 Key1 值中的数组。它实际上是一个进一步的哈希数组。

$VAR1 = {
          'student_name' => 'abc',
          'gender'       => 'male',
          'parent_name'  => {
                              'mothe'  => 'jane',
                              'father' => 'victor'
                            },
          'contact'      => [
                              {
                                'phone'   => '12345',
                                'address' => 'home ref'
                              },
                            ]
};

我试图提取$contact如下数据:

my $contact = $hash_name->{"contact"}

以下是我得到的错误:

Not a hash reference;

标签: perlhash

解决方案


问题是哈希和哈希引用之间的区别。

像这样初始化和访问哈希:

my %hash = ( foo => 123 );
print $hash{'foo'}, "\n";

Hashrefs 是这样的;您使用->运算符来访问值:

my $href = { foo => 123 };
print $href->{'foo'}, "\n";

在嵌套数据结构中,嵌套项只能是标量,而不是散列或数组。Hashrefs 和 arrayrefs 是标量类型。

嵌套结构的“最外层”级别仍然可以是哈希或数组,这就是您似乎所处的情况。

my $contact             = $hash_name{'contact'};
my $first_contact       = $hash_name{'contact'}->[0];
my $first_contact_phone = $hash_name{'contact'}->[0]->{'phone'};

Perl 在深入研究嵌套数据结构时允许使用速记。第一级之后,->可以省略。

my $contact             = $hash_name{'contact'};
my $first_contact       = $hash_name{'contact'}[0];
my $first_contact_phone = $hash_name{'contact'}[0]{'phone'};

推荐阅读