Perl/해쉬 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/해쉬 는 읽기 전용 페이지입니다.
== # 해쉬 관련 함수 == {{{#!vim perl keys(%scores) # %score 의 키들을 나열한 배열 values(%scores) # %score 의 값들을 나열한 배열 each(%scores) # %score 의 (키, 값) 엔트리를 하나씩 반환 delete($scores{key1}) # 특정 엔트리 삭제 exists $scores{key2} # 특정 키의 엔트리 존재 여부 }}} == # Anonymous Hash == 익명 해쉬와 블록은 둘 다 {..} 형태이고 사용되는 위치가 비슷하기 때문에, 위치에 따라서 컴파일러가 잘못 판단하는 경우가 있을 수 있다. 이런 경우 각각을 다음과 같이 사용하여 컴파일러에게 의도를 알려줄 수 있다.
* 익명 해쉬는 앞에 "+"를 붙여서 +{ ... } 의 형태로 * 블록은 empty statement를 넣어서 {; ... } 의 형태로 == # 중괄호 안 bareword == {{{#!vim perl $hash{shift}; # 이것은 $hash{"shift"}로 해석됨 $hash{+shift}; # 단항 + 연산자 - 아무일도 하지 않는 연산자, shift를 하고 그 값을 중괄호 안에 치환 # 해쉬 뿐 아니라 레퍼런스를 디레퍼런스할 때도 push @{+shift}, shift; }}} == # keys, values, each 와 레퍼런스 인자 == Perl 5.12 에서는 이 세 함수가 배열에도 사용 가능하다 * http://perldoc.perl.org/perl5120delta.html#each%2c-keys%2c-values-are-now-more-flexible * values는 뭐 쉽게 짐작가능하듯 배열 원소들의 리스트를 반환한다 (생각해보니 그럼
@array
나
values @array
나 R-value로써는 동일하겠군?) * keys 는 배열의 인덱스의 리스트(0..마지막인덱스)를 반환한다 * each 는 인덱스와 값의 쌍을 반환한다.(이건 꽤 쓸만하겠더라) Perl 5.14 에서는 이 세 함수, 그리고 배열에 쓰는 함수인 push, unshift, pop, shift, splice까지, 인자로 레퍼런스를 받을 수 있다. * http://perldoc.perl.org/perl5140delta.html#Syntactical-Enhancements *
push @{$arrayref}, $elem
이렇게 매번 디레퍼런스하지 않고
push $arrayref, $elem
도 된다는 얘기 그런데 이 두 가지 변화가 맞물리면서, 문제의 소지가 좀 있는 모양. * [http://www.modernperlbooks.com/mt/2012/03/inadvertent-inconsistencies-each-versus-autoderef.html Inadvertent Inconsistencies: each versus Autoderef - Modern Perl Books for modern Perl programming] * [http://www.effectiveperlprogramming.com/blog/1539 Don’t use auto-dereferencing with each | The Effective Perler] * tie나 overload를 통해서 배열과 해시 양쪽의 기능을 다 하는 오브젝트의 레퍼런스를 받는 경우 모호해진다 (현재는
bless
된 오브젝트 레퍼런스를 인자로 주면 에러를 내게 구현되어 있음) * 프로그래머의 착오로 배열과 해시 중 하나를 의도한 상황에서 다른 게 들어갔을 때 의도하지 않은 결과가 나온다 * 위의 링크들(특히 첫번째) 보면 이게 본질적으로 언어 디자인에도 맞지 않는다는 것 같은데 나는 잘 모르겠다. 저런 블로그 글들의 영어는 은근히 헷갈려서ㅠㅠ * 암튼 디레퍼런싱은(특히나
each
의 경우. 나는
keys
도 같은 상황 아닌가 싶은데. values야 뭐 해시나 배열이나 값들을 반환하니 상관없더라도) 주의해서 사용하거나 사용을 피하길 권장하는 말이 있음. == # 기타 == * [http://ko.perlmaven.com/undef-on-perl-arrays-and-hashes Perl 배열과 해시에 대한 undef 호출] * [http://perlmaven.com/perl-hash Perl Hash] == # Comments ==
---- [[컴퓨터분류]]
Perl/해쉬
페이지로 돌아가기 |
다른 수정본 보기