2012-08-08 64 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