2011-12-19 4 views
2

연쇄 방식으로 해시를 사용하면 많은 혼란을 겪습니다. 예를 들어, 나는 다음 Perl 코드를 읽었고, 조각별로 이해하는 법을 배웠다.연쇄 방식으로 해시 사용

$model->{result}->{forcast}->[$index]->{label} = 1; 

$Neg{$examples->{result}->[$index]->{title}} = 1 

또한 일부 항목에는 $ index와 같은 $가있는 이유는 무엇입니까? 다른 사람들은 라벨과 같은 것을 가지고 있지 않습니다.

$ 인덱스는 []에 싸여 있지만 다른 것들은 {}로 묶여 있습니다. 차이점은 무엇입니까?

당신은 인용하지 않고 같은 일반 텍스트 해시 키가 안 상당 $Neg{$examples->{result}->[$index]->{title}} = 1

답변

6

고려 :

$model->{result}->{forcast}->[$index]->{label} = 1; 

->[]는 배열 참조 역 참조로 사용된다.
->{}은 해시 참조를 역 참조하는 데 사용됩니다. 그것은이하지 않는

  • result이 (해시 키입니다 : ($model->{}이 문맥에서 사용되기 때문에)

    • $model 해시 참조입니다 :

      우리가 왼쪽에서 스캔하자 $ 인장은이 문맥에서 사용되기 때문에

    • $model->{result}는 (다시 배열 참조 해시 참조
    • $model->{result}->{forcast}이다) 붙 : $model->{result}->{forcast}->[])
    • $index 가능성 배열 항목
    • $model->{result}->{forcast}->[$index]의 인덱스를 포함하는 사용자에 의해 설정된 변수는 해시 키 값 등의 해시 키
    • $model->{result}->{forcast}->[$index]->{label} 세트 1 해시 참조
    • label

    해시 키는 자동으로 인용 부호가 붙을 수 있습니다. 따라서 해시 키를 result 또는 'result'으로 지정하는 것은 같습니다.

    perldoc perldsc은 데이터 구조용 요리 책입니다. Data::Dumper은 이러한 데이터 구조를 보는 데 매우 유용합니다.

  • -4

    $Neg{$examples->{result}->[$index]->{title}} = 1이다. 이 말 :

    $model->{'result'}->{'forcast'}->[$index]->{'label'} = 1 
    

    그래서 모델 hashref, 그것은 핵심 'FORCAST을'(철자 수없는 이유는 무엇입니까?)을 arrayref, 인이있는 hashref이되는 키 '결과'가되는 인덱스 $index%Neg 중첩 해쉬 체인에서 '제목'요소 인 키가 해시되면, 두번째 1.

    에 설정되는 키 '라벨'을 갖는 hashref을 갖는다 배열.

    마지막 질문에 대해 그렇습니다. 네가 똑같은 것을 두 번 썼기 때문입니다.

    +1

    해시 키의 인용 부호를 제외해도 아무런 문제가 없습니다. 열쇠가 공백을 포함하지 않는 한 그것은 잘 동작합니다. – friedo

    +0

    경고를 사용하지 않는 한 가장 좋은 방법입니다. 그리고 경고를 사용하지 않으면 나쁜 사람이됩니다. – Dan

    +1

    인용되지 않은 해시 키 사용에 대한 경고는 없습니다. – friedo