在我学习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分配任何东西。我不理解的是初始化创建的结构类型,以及如何使用它。您可以提供的任何信息可以帮助我理解这种扭曲语言的语法,这将有所帮助!
答案 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;