perl - 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;
解决方案
问题是哈希和哈希引用之间的区别。
像这样初始化和访问哈希:
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'};
推荐阅读
- mysql - 如何在 mysql 数据透视表中获取动态年份数据
- php - 在php中获取二进制数据大小的正确方法是什么?
- javascript - Bootstrap Twitter 关闭模式重定向
- python-3.x - 无法从 URL 读取请求 HTML 响应
- django - 芹菜不注册周期性任务
- docker - DockerFile 和环境变量
- json - JSON解码成变体模型Swift4
- php - 在内部连接查询 PHP + MySQL 中查找具有相同名称的用户
- scala - 查询完整的 cassandra 表时,Spark Job 只会停止
- javascript - 如何从端点 API 实时获取数据