2012-08-08 2 views
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에게 아무 것도 지정하지 않습니다. 내가 이해하지 못하는 것은 초기화가 생성하는 구조의 유형과 정확히 그것을 사용하는 방법입니다. 이 왜곡 된 언어 구문을 이해하는 데 도움이되는 정보를 제공해 주시면 도움이 될 것입니다.

답변

5

참조 해제 할 레이어가 두 개 있습니다. 외부 레이어는 배열 ref이고, 내부 레이어는 해시 참조입니다.

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

아니면 다른 방법을 넣어, $familyInfo는 익명의 배열에 대한 참조를 보유하고 있습니다. 단 하나의 요소가 있습니다. 이 요소는 익명의 해시에 대한 참조를 포함합니다.

게시 한 샘플 코드와 다른 중요한 구성 요소는 dereferencing operator, ->입니다.

화살표 연산자가 없으면 $familyInfo[0]@familyInfo의 요소임을 Perl에 알리는 것입니다 (그렇지 않은 경우 @familyInfo은 존재하지 않습니다). 존재하는 것은 $familyInfo입니다. 배열 참조를 포함하는 스칼라이며, 요소를 가져 오려면 역 참조해야합니다. perldoc perlreftut 구문을 명확히하는 데 도움이됩니다.

위의 방법으로 문제가 해결되지 않으면 입력 한 데이터가 표시된 것과 일치하지 않습니다. 이 경우 입력 데이터를 자세히 보려면 ​​Data::Dumper을 사용하십시오.

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

도움 주셔서 감사합니다! 필자는 'Modern Perl'이라는 책을 읽었으며 '->'연산자를 사용하지 않고 사용하기 시작했습니다. 나는 그것이 역 참조라는 것을 전혀 몰랐다. –

+0

@ AdamS 내 대답을 받아 들일 수 있었습니까? – DavidO

관련 문제