2

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

4

1 回答 1

5

有两层需要解引用,外层是数组引用,内层是哈希引用。

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

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

与您发布的示例代码不同的重要组件是取消引用运算符, ->

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

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

use Data::Dumper;
print Dumper $familyInfo;
于 2012-08-08T17:49:10.760 回答