2012-09-17 3 views
-1

Slicing a nested hash in Perl 다른 질문에 대한 답변에서 영감을 얻은 다른 해시에 포함 된 키 목록을 사용하여 해시를 조각 내기위한 구문은 무엇입니까? Perl의 배열 해시에 저장된 키를 사용하여 해시 조각 내기

난 다음 그것을 할 것이라고 생각하지만 그렇지 않습니다 :
@slice_result = @{$hash1{@($hash_2{$bin})}}; 

나는 "scalar found where operator expected"를 말한다 오류가 발생합니다. ?

답변

1

귀하의 모호한 설명은 내가 당신이 무슨의도 확실하지 않다 생각합니다. 명확하게 설명 할 수있을 때까지 데이터 구조를 흡수하는 데 시간을 투자해야합니다.

은 당신이 당신은 %의 hash1의 슬라이스의 키와 같은 %의 hash2의 요소 중 하나가 참조하는 배열을 사용하려는 당신이

my %hash1 = (
    apple => 2, 
    banana => 3, 
    orange => 4, 
); 

my %hash2 = (
    red => [qw(apple  )], 
    yellow => [qw(apple banana)], 
    orange => [qw(orange  )], 
); 

이 말을 생각합니다. 당신이 그것을 이해한다면, 그것은 단계적으로 그것을하는 것에 불과합니다.

$hash2{yellow} 
우리에게 원하는 배열에 대한 참조를 얻을 것이다

@{ $hash2{yellow} } 

은 우리에게 배열 자체를 얻을 것이다. 우리는 우리가 얻을 해시 조각

@hash1{EXPR} 

의 인덱스 식으로 그것을 사용하려는 : 나는 (다른 해시 ** 개최 ** 값을 사용하여 해시를하지 슬래시하려고

@hash1{ @{ $hash2{yellow} } } # 2,3 
+0

내 대답을 바꿉니다. 처음에는 질문에 대한 대답이 없었습니다. – ikegami

+0

감사합니다. 언제'@ {$ hash {$ item}}'대신'@hash {...}'를 사용합니까? –

+1

@roseck, 배열 역 참조 ('@ {...}') 대신 해시 슬라이스 ('@hash {...}')를 원할 때마다. – ikegami

1

이것은 또 다른 해시의 키를 기준으로 해시 조각에 대한 올바른 구문은 다음과 같습니다 데이터의

my %hash1 = ('this' => 2, 
       'that' => 1, 
      ); 
my %hash2 = ('this' => 'two', 
       'that' => 'one', 
      ); 


my @slice = @hash1{keys %hash2}; 


print @slice # prints 12; 
+0

열쇠),하지만 포인터 주셔서 감사합니다 –

관련 문제