여기서 ,연산자는 연산자 우선순위가 다른 연산자에 비해 낮을 경우가 많기 때문에
배열에 리스트를 대입하는 경우
my @array = (1,2,3,4); 식으로 리스트가 먼저 구성되도록 ( ) 로 명시적으로 묶어줍니다.
리스트 슬라이스 문법은 다음과 같은 형식입니다.
(리스트)[리스트]
my @a = (1,2,3,4)[0,2,3];
라고 하면 @a에는 1,3,4 가 들어가게 되는거죠
Perl에서는 리스트 컨텍스트(list context)라는 것이 있어서 문맥상으로 리스트가
오기를 기대하는 부분이 있습니다. 이를테면
my @a = HERE;
에서 HERE라는 부분은 리스트 컨텍스트가 됩니다.
(@array)[0] 에서 @array가 있는 부분은 리스트 컨텍스트 입니다.
배열이 리스트 컨텍스트에 오면 배열의 내용이 다 풀려서 리스트처럼
동작을 합니다. 따라서
@array = (3,4,5); 라면
(3,4,5)[0] 처럼 동작해서 결과적으로 3이 되는거죠.
Perl을 제대로 이해하고 사용하려면 리스트가 무엇인지
그리고 리스트 컨텍스트,스칼라 컨텍스트 등 컨텍스트가 무엇인지를
확실하게 이해해야 합니다. Perl을 좀 해봤다고 하는 사람들도
이것을 이해하지 못하고 있는 경우도 많고 이해하지 못하기 때문에
더 이상 발전이 없는 경우를 많이 봅니다.
둘다 됩니다.
Perl 5는 최종적으로 얻어지는게 무엇이냐를 기준으로 sigil($,@,% 같은 것)을 붙입니다.
(Perl 6에서는 바뀌지만....)
my @array = (3,4,5);
에서 @array는 배열이고 이 배열의 첫번째 요소는
$array[0] 으로 나타내죠 앞에 스칼라를 나타내는 sigil이 붙은 이유는
그 값이 스칼라 값을 나타내기 때문입니다.
그런데 Perl에서는 배열 슬라이스(array slice)란 문법이 있습니다.
만약에 @array의 첫번째,세번째 요소를 한꺼번에 뽑아내고 싶으면
my @array2 = @array[0,2];
라고 하면 @array2 에는 3,5 가 들어가게 됩니다. 위에서 @array[0,2]에서
앞에 $대신 @가 붙은 이유는 제가 제일 처음 말했던 규칙을 떠올리면 이해가
가실 겁니다.
따라서 @array[0]은 첫번째 요소만을 배열 슬라이스 문법으로 나타낸 것입니다.
my $a = $array[0]; 은 my $a = 3; 처럼 해석되고
my $a = @array[0]; 은 my $a = (3); 처럼 해석됩니다.
결국 저런 경우 같은 결과를 얻지만 배열의 한 요소를 나타낼때는 슬라이스 문법을
사용할 필요가 없습니다. 오히려 혼돈만 주지요.
두번째
(@array)[0] 은 리스트 슬라이스 문법이라는 것을 우선 알아야 합니다.
Perl에서 리스트란 어떤 데이터들을 ,연산자로 연속적으로 나열한 것일 뿐입니다.
언어마다 배열과 리스트가 같은 개념으로 혼용되어 쓰이는 경우가 있는데
Perl에서 배열과 리스트는 명백히 다릅니다.
참고: http://www.perlfoundation.org/perl5/index.cgi?array_vs_list
리스트 예) 1,2,3,4
여기서 ,연산자는 연산자 우선순위가 다른 연산자에 비해 낮을 경우가 많기 때문에
배열에 리스트를 대입하는 경우
my @array = (1,2,3,4); 식으로 리스트가 먼저 구성되도록 ( ) 로 명시적으로 묶어줍니다.
리스트 슬라이스 문법은 다음과 같은 형식입니다.
(리스트)[리스트]
my @a = (1,2,3,4)[0,2,3];
라고 하면 @a에는 1,3,4 가 들어가게 되는거죠
Perl에서는 리스트 컨텍스트(list context)라는 것이 있어서 문맥상으로 리스트가
오기를 기대하는 부분이 있습니다. 이를테면
my @a = HERE;
에서 HERE라는 부분은 리스트 컨텍스트가 됩니다.
(@array)[0] 에서 @array가 있는 부분은 리스트 컨텍스트 입니다.
배열이 리스트 컨텍스트에 오면 배열의 내용이 다 풀려서 리스트처럼
동작을 합니다. 따라서
@array = (3,4,5); 라면
(3,4,5)[0] 처럼 동작해서 결과적으로 3이 되는거죠.
Perl을 제대로 이해하고 사용하려면 리스트가 무엇인지
그리고 리스트 컨텍스트,스칼라 컨텍스트 등 컨텍스트가 무엇인지를
확실하게 이해해야 합니다. Perl을 좀 해봤다고 하는 사람들도
이것을 이해하지 못하고 있는 경우도 많고 이해하지 못하기 때문에
더 이상 발전이 없는 경우를 많이 봅니다.
이것들을 확실히 짚고 넘어가시면 Perl의 새로운 세계가 보이실겁니다.
감사합니다... ^^
감사합니다.
--------------------------------------
2b or not 2b, that is the question
댓글 달기