2012-08-08 32 views
2

原谅我学习Perl的新手问题。我有这样的代码:从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"; 

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

回答

5

有两层要解引用,外层是数组ref,内层是散列引用。

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

,或者换一种说法,$familyInfo持有一个匿名数组的引用。只有一个元素。该元素包含对匿名散列的引用。

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

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

如果上述不适用于您,那么您的输入数据与您所显示的数据不符。在这种情况下,请使用Data::Dumper来仔细查看您的输入数据。

use Data::Dumper; 
print Dumper $familyInfo; 
+1

感谢您的帮助!我一直在关注“现代Perl”一书,它刚开始使用' - >'操作符,而没有介绍它。我不知道这是取消引用。 – 2012-08-08 21:02:05

+0

@AdamS我的答案可以接受吗? – DavidO 2012-08-10 21:58:18