从perl数据结构中提取信息

时间:2012-08-08 17:40:35

标签: perl hash

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

my $familyInfo = [{
            'dad' => 'donald',
            'mom' => 'helen',
            'sister' => 'cate',
}];

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

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

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

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

1 个答案:

答案 0 :(得分:5)

取消引用有两层,外层是数组引用,内层是哈希引用。

my $mother = $familyInfo->[0]{mom};

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

与您发布的示例代码不同的重要组件是dereferencing operator->

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

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

use Data::Dumper;
print Dumper $familyInfo;