동글동글 라이프
perl Array & C language Array 본문
perl을 처음 배우는 분들에게 간단한 개념을 설명하기 위해
예전에 잠시 정리했던 문서를 블로그에 옮긴다.
이 문서는 perl의 배열의 특징 설명을 위해 C언어의 배열과 비교, 분석을 하였다.
혹시나 perl의 장점 위주로 설명한다고 해서 perl이 언어로써 우위를 점한다는 극단적인
흑백논리에는 빠지지 않기 바란다.
배열의 선언 및 크기 지정
C언어에서는 배열을 선언할때는 변수의 뒤에다 [ ] (괄호)을 붙여 변수의 크기를 지정한다.
int Array[10] ; // 정수형 배열 10개 생성
처음 선언을 배열의 크기를 지정해 줘야 하며 한번 정한 크기는 변경을 할 수 없다.
그러므로 배열을 처음 선언을 할 때 적당한 크기를 지정해 주어야 하며
배열보다 많은 크기의 데이터를 입력했을 경우에 운영체제가
예외 처리를 하여 경고창을 띄운다.
그러면... perl의 배열에 대해서 한번 살펴보자.
일단 배열의 이름 앞에 @문자를 붙여 선언을 한다.
@Array # 배열 생성
perl의 배열은 일반변수로 생성되며 데이터 기본형은 scalar형이기 때문에
정수,문자열,실수 등의 값들을 저장할 수 있다.
그런데 배열의 크기는 어떻게 정하는 것일까?
perl에서는 크기를 전혀 신경 쓰지 않아도 된다.
배열의 요소와 크기는 자동으로 설정해 정해 주며 ( 초기값을 넣으면 그 값만큼 배열 지정 )
프로그램을 실행하는 도중에도 배열의 크기를 늘이거나 줄일 수 있기 때문이다.
배열에 값 넣기
C언어에서는 배열에 값을 넣기 위해서는 두가지 방법이 있다.
처음 배열을 선언할 때
int Array[10] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
그리고 배열의 요소에 값을 직접적으로 넣는 방법
Array[0] = 100;
Perl의 경우도 마찬가지로 2가지 방법이 있다.
첫번째로 선언과 동시에 값을 넣는 방법이 있다.
밑의 예제를 보자.
Code:
use strict;
my @array1 = ( 1, 2, 3, 4, 5, 6, 7, 8, 9);
my @array2 = ( 1..9);
print " @array1 \n";
print " @array2 \n";
|
Output:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
|
배열 2개를 생성을 한 뒤 각각의 요소에 list 구조를 이용하여 값을 넣었다.
처음 배열은 정수를 1에서 9까지 차례대로 넣어서 출력하였고
두 번째 배열은 ..(목록구성연산자)를 사용하여 1에서 9까지 값을 넣었다.
즉 두 배열은 같은 값을 가지고 있다는 이야기 이다.
".." 연산자를 적절히 사용하면 효율적인 프로그래밍이 가능하다.
Code:
use strict;
my @array1 = (1..10);
my @array2 = ('A'..'Z');
my @array3 = ("AB".."BA");
my @array4 = ("가".."하");
print " @array1 \n";
print " @array2 \n";
print " @array3 \n";
print " @array4 ";
|
Output:
1 2 3 4 5 6 7 8 9 10
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA
가 |
흥미로운 사실은 문자열도 증가가 된다는 것이다.
AB 와 BA 까지의 문자열도 출력이 되는데 AZ까지 출력 된 뒤 BA라는 값으로 증가한다.
아쉽지만 한글은 이런 좋은 기술이 적용되지 않는다.
C언어에서의 배열은 같은 데이터형만 담을 수 있는 제한된 기능에 반해
Perl에서는 여러 형을 동시에 넣을 수 있다.
Code:
use strict;
my @Array = (100,"백입니다", 19.536 ,"십구점오삼육");
print " @Array \n";
Output:
100 백입니다 19.536 십구점오삼육
이것은 배열이 아니라 구조체라고 해도 전혀 손색이 없을 정도로 다양한 데이터형의 값들이 저장된다.
배열의 요소 값 접근
C언어 에서는 배열의 각 요소를 [ ] 연산자를 사용해 접근한다.
첨자는 0부터 시작하기에 첫번째 배열의 요소에 100 이란 값을 넣는다고 할 때
Array[0] = 100;
Array배열의 첫번째 값에 100이란 값을 대입을 하였다.
Perl에서의 개별적으로 배열의 값을 접근하는 문법은 C언어와 거의 흡사하다.
하지만 여러가지 기술이 추가 되는데 일반적인 방법부터 먼저 살펴보자.
Code:
use strict;
my @Array = (1,3,9);
print "$Array[0] $Array[1] $Array[2] $Array[3] \n";
print "$Array[-1] $Array[-2] $Array[-3] $Array[-4] \n";
|
Output:
1 3 9
9 3 1 |
배열명 앞에 @문자가 아닌 변수를 표현할 때의 $ 문자를 적어준 뒤 뒤에 배열의 각 값들을 적는다.
정수로의 접근 뿐만 아니라 음수로도 각 배열의 요소에 접근을 할 수 있는데
음수로 접근할 경우에는 마지막에 있는 배열의 요소부터 접근을 한다.
use strict;
my @Array = qw(문자열을 편하게 입력한다);
print " @Array";
|
Output:
문자열을 편하게 입력한다 |
문자열을 저장할 때 " "를 쓰지 않고 qw 를 사용하여 배열에 대입할 수 있다.
배열의 요소에 값을 넣을 때 상상이상으로 여러 문법도 다 허용이 된다.
Code:
use strict;
my @Array;
my @String;
my @Number = (2,0,1,3);
@Array[0,1] = ( "Lee","K");
print "$Array[0] $Array[1] \n";
@String = qw(너 밥 먹었니 ?);
@Array = @String[@Number];
print "@String\n";
print "@Array\n";
|
Output:
Lee K
너 밥 먹었니 ?
먹었니 너 밥 ?
|
처음 예제는 배열의 요소에 개별적으로 값을 넣는 방법이고
두번째 예제는 개별요소에 배열을 대입하여 다시 그 값을 배열으로 저장하는 방법이다.
이것만 보아도 Perl이란 언어가 얼마나 유연한지 알 수 있는 한 단편의 예가 되겠다.
Perl의 경우에는 처음 이야기를 했듯이
배열의 값을 명시해줄 필요가 없음으로 어디까지 배열이 생성이 되어있는지 알지 못할 때가 있다.
이럴때는 $#배열명을 적어주면 그 배열의 마지막 첨자값을 알 수 있는데
배열의 첨자는 0부터 시작하는 것을 잊지말고 첨자값을 계산하기 바란다.
Code:
use strict;
my @Array;
my $Number;
@Array = qw(배열의 첨자를 살펴봅시다);
$Number = @Array;
print "Array 배열은 총".$Number."개의 배열요소로 구성되어 있다. \n";
print '마지막 요소의 문자열은 "'.$Array[$#Array].'" 이다';
|
Output:
Array 배열은 총3개의 배열요소로 구성되어 있다.
마지막 요소의 문자열은 "살펴봅시다" 이다 |
그와 더불어 배열을 변수에 대입하면 총 배열요소의 갯수가 들어간다는 사실도 확인을 할 수 있다.
'개발자 이야기 > Perl' 카테고리의 다른 글
음악을 들어보자 #5 (5) | 2008.11.13 |
---|---|
CPAN Author 등록하기 (0) | 2008.11.13 |
More fun with strings(substr,split,join) (2) | 2008.11.03 |
Chapter 5. Moving On (0) | 2008.10.31 |
지식IN(naver)에서 질문 검색 후 자동 출력 (6) | 2008.10.27 |