2011-03-28 6 views
1

나는 스크립트에서 작업 중이며 해시에 저장된 배열에서 값을 가져 오려고합니다. Google에서 검색 한 후 SO에 대한 질문을 검색 한 후 (비슷한 제목이 있지만 해결되지 않은 문제 또는 광산과 약간 다른 문제를 해결 한 항목이 있음) Data Structures Cookbook을 확인한 후 시도해 볼만한 모든 것을 시도한 후에 도와달라고 간다.해시에 저장된 배열 요소에 어떻게 액세스합니까?

해시가 $action이고 배열이 $action->{'Events'}입니다. 여기 print Dumper($action->{'Events'});의 출력입니다 :

$VAR1 = [{ 
    'Muted'  => 'something', 
    'Role'   => 'something', 
    'Event'  => 'something', 
    'Channel'  => 'something', 
    'Talking'  => 'something', 
    'UserNumber' => 'somenumber', 
    'CallerIDName' => 'somenumber', 
    'Conference' => 'somenumber', 
    'MarkedUser' => 'something', 
    'ActionID'  => 'somenumber', 
    'CallerIDNum' => 'somenumber', 
    'Admin'  => 'something' 
}]; 

내가 얻을 필요가, 예를 들어, $action->{'EVENTS'}->{'CallerIDName'}의 가치는하지만,이 구문과 다른 많은이 작동하지 않습니다. 심지어 $action->{'EVENTS'}[6]$action->{'EVENTS'}->[6] 등을 시도했습니다.

답변

4

그것은 해시의 배열이며,이 방법을 시도해보십시오

$action->{'EVENTS'}[0]->{'CallerIDName'} 

더 자세히 위해 perldsc를 참조하십시오.


업데이트 예와 같이 :

use strict; 
use warnings; 
use Data::Dumper; 
my $action = {}; 
$action->{'Events'} = [{'Muted' => 'something', 
      'Role' => 'something', 
      'Event' => 'something', 
      'Channel' => 'something', 
      'Talking' => 'something', 
      'UserNumber' => 'somenumber', 
      'CallerIDName' => 'somenumber', 
      'Conference' => 'somenumber', 
      'MarkedUser' => 'something', 
      'ActionID' => 'somenumber', 
      'CallerIDNum' => 'somenumber', 
      'Admin' => 'something'}]; 
#push hash into the array of hashes 
push(@{$action->{'Events'}},{'Muted' => 'something', 
       'Role' => 'something1', 
       'Event' => 'something1', 
       'Channel' => 'something1', 
       'Talking' => 'something1', 
       'UserNumber' => 'somenumber1', 
       'CallerIDName' => 'somenumber1', 
       'Conference' => 'somenumber1', 
       'MarkedUser' => 'something1', 
       'ActionID' => 'somenumber1', 
       'CallerIDNum' => 'somenumber1', 
       'Admin' => 'something1'}); 
for(my $i=0; $i < @{$action->{'Events'}}; $i++){ 
    print Dumper($action->{Events}[$i]); #print entire hash in array index $i 
    #print callerIDName key(any key) of each hash 
    print Dumper($action->{'Events'}[$i]->{'CallerIDName'}); 
} 
+0

감사합니다. –

+0

$ action -> { 'Events'}에서 해시를 반복하는 방법을 제공함으로써 좀 더 도움을받을 수 있습니까? –

+1

@altvali : 업데이트 된 답변보기. –

2

당신에게없는 게 하나는 $ 조치가 배열에 대한 참조를 포함, 그래서 다음 부분 배열 반 참조해야합니다. 그 안에는 해시가 있으며 해시를 참조 해제해야합니다. 그래서 다음과 같아야합니다

$action->{'EVENTS'}[0]{'CallerIDname'} 

은 (주 그 -> 's를 먼저 선택 사항입니다, 그래서 이것은뿐만 아니라 괜찮 이상 :

$action->{'EVENTS'}->[0]->{'CallerIDname'} 

그리고 똑같은 일을)

1

외부의 []는 해시가 배열 안에 있음을 나타냅니다. 따라서 시도하십시오 :

$action->{Events}->[0]->{CallerIDName} 

{Events}와 [0] 사이에 ->를 생략 할 수 있지만 명확하게하기 위해 선호합니다. 여기서는 차이가 없지만 다른 곳에서는 차이가 있습니다. 비교 :

@array = (1,2,3); 
    $arrayref = \@array; 
    print $arrayref[0]; # accesses non-existent array @arrayref 

    print $arrayref->[0]; # '1' 
관련 문제