从perl数据结构中提取信息

Ada*_*m S 2 perl hash

在我学习Perl时,请原谅一个新手问题.我有一些像这样的代码:

my $familyInfo = [{
            'dad' => 'donald',
            'mom' => 'helen',
            'sister' => 'cate',
}];
Run Code Online (Sandbox Code Playgroud)

请注意,此代码我无法以任何方式修改.我想要做的是从这个数据结构中提取妈妈:

my $mother = $familyInfo{mom};
print "mother: $mother\n";

my $mother = $familyInfo[0]{mom};
print "mother: $mother\n";
Run Code Online (Sandbox Code Playgroud)

这根本不起作用.它没有给$ mother分配任何东西.我不理解的是初始化创建的结构类型,以及如何使用它.您可以提供的任何信息可以帮助我理解这种扭曲语言的语法,这将是有帮助的!

Dav*_*idO 5

取消引用有两层,外层是数组ref,内层是散列引用.

my $mother = $familyInfo->[0]{mom};
Run Code Online (Sandbox Code Playgroud)

或者换句话说,$familyInfo保持对匿名数组的引用.只有一个元素.该元素包含对匿名哈希的引用.

这是从您发布的示例代码不同的重要组成部分,是对其操作,->.

没有箭头操作符,你告诉Perl它$familyInfo[0]是一个元素@familyInfo(它@familyInfo不存在,甚至不存在).存在的是$familyInfo,包含数组引用的标量,如果要获取其元素,则必须将其解除引用.perldoc perlreftut应该有助于澄清语法.

如果以上内容对您不起作用,那么您的输入数据与您显示的数据不符.在这种情况下,使用Data :: Dumper仔细查看输入数据.

use Data::Dumper;
print Dumper $familyInfo;
Run Code Online (Sandbox Code Playgroud)