2016-08-01 4 views
1

해시 값 중 하나가 배열 인 해시 배열이 있습니다. -> "@title"을 "part"로 을 누르고 인쇄용으로는 -> 각 책을 {title}에 임시 배열로 넣어 각 제목 요소에 액세스하지만 첫 번째 요소 만 인쇄합니다. 나는 ' t 액세스 배열 "책"에서 "제목"perl에서 해시 배열의 배열에 어떻게 액세스합니까?

@books =(); 
@title = (1,2,3,4,5); 
push @books,{subject=>"hello" , part =>@title }; 
for($i=0;$i<scalar(@books);++$i) 
{ 
    print $books[$i]{subject}; 

    @temp = $books[$i]{part}; 
    for($j=0;$j<scalar(@temp);++$j) 
    { 
     print $temp[$j]; #this print just first element "1" 
    } 
} 
+0

가 참조 : 다음 @temp 배열에 part 키는 (이것은 배열 참조이기 때문에)을 해제 참조해야 [? 나는 펄 해시 값으로 배열을 저장하려면 어떻게해야이 (HTTP를 : //stackoverflow.com/questions/28480241/how-do-i-store-an-array-as-a-value-in-a -perl-hash). –

+0

또 다른 문제점이 있습니다 : 각 책에 대해 마지막 책의 정보를 인쇄합니다 –

답변

4

여기서 문제의 모든 요소는 당신이 @books 배열에 밀고 해시 참조가 제대로 만들어지지되지 않는 것입니다.

해시 참조이 같은 외모를 만들 :

{ 'subject' => 'hello', 
    'part' => 1, 
    '2'  => 3, 
    '4'  => 5, 
} 

당신은 아마 같이하기를 기대하는 경우 : 이런 일이

{ 'subject' => 'hello', 
    'part' => [ 
     1, 
     2, 
     3, 
     4, 
     5, 
    ], 
} 

때문에이 해시의 값 및 배열 SCALAR 값이어야합니다.

push @books, { subject => "hello", part => \@title }; 

참고 : 키 part에서 @title 배열에 참조을 저장할 필요가 올바르게 해시 참조를 만들려면, 당신은 \에 대한 참조를 만들 이것은 또한 의미 당신은을 추출 할 때

@temp = @{ $books[$i]{part} }; 
관련 문제