전종필 리퍼런스(참조형)에 대해선 아마 알고 계실겁니다. 모르시면 배열의 배열, 해쉬의 해쉬, 배열의 해쉬, 해쉬의 배열를 참조하시기 바랍니다. 아래 두개의 변수가 있습니다. 하나는 해쉬의 리퍼런스로서 스칼라 변수($aref)이고, 또 하나는 해쉬(%aref)입니다.
그렇다면, $$aref{a}를 출력하면 'Hey'가 출력될까요 ? 'Man'이 출력될까요 ?
$$aref{a}를 출력하면 'Hey'가 출력됩니다.이유는 역참조(dereference)를 행하면 연산자 $(맨 앞의 $)는 인접한 항(Term)에 적용되기 때문입니다. 결국, $$aref{a}는 해쉬 %$aref에서 키가 'a'인 요소로서, 좀 더 명확히 하려면 ${$aref}{a}입니다. (사실, 사용할 때는 보통 $aref->{a}라고 합니다.) 그렇다면 Man을 출력하기 위해서 취한 조치는 무엇인가요?(말투가 좀 이상 ^^) {}를 $aref{a} 주변에 씌우고 그 앞에 $를 붙였습니다. $aref{a}는 해쉬 %aref에서 키가 'a'인 요소로서, 문자열 "Man\n"의 참조형(앞에 \를 붙인)입니다. 따라서 이 것 전체인 $aref{a}에 대한 역참조를 하면 "Man\n"이 되는 것입니다. 사실, 역참조를 다중으로 하다보면 많이 헷갈립니다. 어떤 것에 우선순위가 걸릴지 확실하지 않다면, 다음처럼 {}로 싸서 우선순위를 명시하면 됩니다.
위 문항은 $myref->{a}가 Hash의 리퍼런스의 리퍼런스인 경우이겠군요.
(헷갈리겠지만 잘 들여다 보시길...) |
Tips in Action > 배열과 Hash >