Perl/Perlfaq4-List-and-Array 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/Perlfaq4-List-and-Array 는 읽기 전용 페이지입니다.
== # 리스트와 배열의 차이점은? (What is the difference between a list and an array?) == * 원문:
http://learn.perl.org/faq/perlfaq4.html#What-is-the-difference-between-a-list-and-an-array-
리스트는 스칼라들을 모아놓고 변경 불가능하게 고정시킨 것(fixed collection)이다. 배열은 스칼라들의 모음을 담을 수 있는 변수인데 이 모음은 변경할 수 있다(variable collection). 배열의 내용물은 리스트 연산자에 피연산자로 제공될 수 있고, 따라서 리스트 연산자들은 배열에도 동작한다: {{{#!vim perl # 슬라이스 ( 'dog', 'cat', 'bird' )[2,3]; @animals[2,3]; # 순회 foreach ( qw( dog cat bird ) ) { ... } foreach ( @animals ) { ... } my @three = grep { length == 3 } qw( dog cat bird ); my @three = grep { length == 3 } @animals; # 인자 리스트로 전달 wash_animals( qw( dog cat bird ) ); wash_animals( @animals ); }}} 배열 연산자들은 스칼라를 변경하거나, 재배열하거나, 추가하거나 제거하며, 오직 배열에만 동작한다. 배열 연산자에는
shift
,
unshift
,
push
,
pop
,
splice
가 포함된다. 배열은 또한 길이를 변경할 수 있다: {{{#!vim perl $#animals = 1; # 처음 두 원소만 남기고 끊어버림 $#animals = 10000; # 10,001 개의 원소가 있는 배열로 늘림 }}} 배열의 원소는 변경할 수 있다. 그러나 리스트의 원소는 변경할 수 없다. {{{#!vim perl $animals[0] = 'Rottweiler'; qw( dog cat bird )[0] = 'Rottweiler'; # 신택스 에러! foreach ( @animals ) { s/^d/fr/; # 잘 동작한다 } foreach ( qw( dog cat bird ) ) { s/^d/fr/; # 에러! 읽기 전용인 값을 변경하려 함 } }}} 만약 리스트의 원소가 어떤 변수라면 리스트의 원소를 변경할 수 있는 것처럼 보인다. 그러나 이 경우는 리스트의 원소를 변경하는 게 아니라 그 리스트 원소가 가리키는(refer to) 대상을 변경하는 것이다. 리스트 원소 자체는 변하지 않으며 여전히 같은 변수이다. 문맥에도 주의를 해야 한다. 배열을 스칼라에 할당하여 배열의 원소의 갯수를 얻어낼 수 있다: {{{#!vim perl my $count = @animals; # 배열에 대해서만 동작함 }}} 동일한 작업을 리스트를 대상으로 수행할 경우, 사뭇 다른 결과를 얻는다. 마치 우변에 리스트가 있는 것처럼 보이지만, Perl은 실제로는 컴마로 구분된 다수의 스칼라들로 간주한다: {{{#!vim perl my $scalar = ( 'dog', 'cat', 'bird' ); # $scalar의 값은 'bird'가 된다. }}} 스칼라 변수에 할당하려 하기 때문에, 우변이 스칼라 문맥이 된다. 스칼라 문맥에서 컴마 연산자(그렇다, 컴마도 연산자다!)는 자신의 좌측 피연산자를 평가하고, 결과는 내던져버리고, 우측 피연산자를 평가한 후 그 결과를 반환한다. 요컨데, 저 리스트 같이 생긴 우변은 가장 우측에 있는 값을
$scalar
에 할당하게 된다. 많은 사람들이 이 부분을 혼동하곤 하는데, 리스트 닮은 우변을 만들 때 마지막 원소가 원소의 갯수와 동일한 값인 형태로 골랐기 때문이다: {{{#!vim perl my $scalar = ( 1, 2, 3 ); # $scalar의 값은 "우연히" 3이 된다. }}} == # 참고 == [[/배열]] - 리스트와 배열의 차이에 관한 다른 글들이 소개되어 있음. == # Comments ==
---- [[컴퓨터분류]] [[Perl]] [[/Perlfaq]]
Perl/Perlfaq4-List-and-Array
페이지로 돌아가기 |
다른 수정본 보기