제공: 한빛미디어 네트워크 기사
저자: 김대곤
본의 아니게 필자는 펄(Perl) 관련 서적을 네 권이나 가지게 되었다. 솔직히 말해서 누군가가 더 이상 필요하지 않다고 내어놓은 책들을 짚어 온 것이다. 하여튼, 이 글을 쓰려고 생각했을 때, 각 책들이 펄을 어떻게 소개하는지 또는 정의하는지 궁금해졌다. 필자가 가지고 있는 책들은 모두 오렐리사에서 출판된 영문서적들이다.
• Perl is a language for getting your job done ( Programming Perl )
• Perl is short for “Practical Extraction and Report Language” or “Pathological Eclectic Rubbish Lister” ( Learning Perl )
• Perl is a programming language that is useful ( Perl in a nutshell )
• Perl isn’t a low level language; Perl is designed for text manipulation.
전반적으로 “텍스트 관련 작업에 유용하고 사용하기 쉬운 언어”라고 말하고 있는 듯하다.
이제 위에서 사용된 용어들의 의미을 하나씩 살펴보면서 몇 가지 예제들과 함께 펄의 기본 문법을 살펴보도록 하자.
#!/usr/bin/perl -w
while (<*.txt>) {
print $_ . "n";
}
현재 디렉토리에 있는 텍스트 파일들을, 정확히 말해서 .txt로 끝나는 파일들을, 출력하는 펄 프로그램이다. 이러한 프로그램을 C를 이용해서 작성한다고 생각해보라. 엄청난 차이를 느낄 수 있을 것이다. 펄은 C 언어와 같이
low-level(프로그래머 보다 컴퓨터에 가까운) 언어가 아니다.
잠시 위 프로그램을 설명하면, 첫번째 줄은 이 프로그램이 펄로 해석되어야 함을 알려주는 역할을 한다. 그 다음에 나오는 while 문은 다른 언어와 같이 괄호 안에 나오는 표현이 특정한 값을 가질 때까지 계속 반복하는 반복문이다. 괄호 안에 있는 표현은 현재 디렉토리에 있는 .txt로 끝나는 파일의 이름들을 하나씩 읽어들이는 입력문 정도로 말할 수 있다. 반복문 while 안에 있는 print 문장은 $_ . “n”을 화면으로 출력하는 명령문이다. 여기서 . 은 펄에서 두 문자열을 합칠 때 사용하는 예약어이다. 즉 “Hello ” . “World”는 “Hello World”을 의미한다. 마지막으로 $_ 은 <*.pl>이 읽어들인 정보가 저장되어 있는 특정한 이름의 변수라고 보면 된다.
펄은 세 가지 종류의 데이터 타입를 가지고 있다. 그러나 C 언어처럼 저장될 수 있는 타입들을(예를 들어 정수, 실수) 지정하는 것은 아니다. 펄 변수들은 Scalar, List, Hash 로 구분된다. Scalar는 하나의 정보를 저장하는 것이다. 즉, 수나 문자열이 Scalar 변수라고 할 수 있다. 리스트는 말 그대로 여러 개의 Scalar 변수를 가지고 있는 것이다. Hash는 두 개의 Scalar 변수 쌍을 가지고 있는 것이다. 아래 예제는 각 변수들이 어떻게 정의되고 사용되는지에 대해 간단하게 보여주고 있다.
#!/usr/bin/perl
$scalar = "I am scalar";
$num = 3.4;
@list = ( ["Kim", "DaeGon"],
["Lee", "DongJi"] );
%hash = ( "Kim" => "DaeGon",
"Lee" => "DongJi" );
# Scalar
print $scalar . "n";
print $num . "n";
$num = $num + 1;
$scalar = $scalar + 1;
print $num . "n";
print $scalar . "n";
# List
print $list[1][1] . "n";
print "The size of list is " . $#list . "n";
$list[2][0] = "New";
print "The size of list is " . $#list . "n";
# Hash
print $hash{"Kim"} . "n";
$hash{"Kim"} = "HaYoung";
$hash{"New"} = "Name";
foreach $item ( keys(%hash) ) {
print $item . "-> $hash{$item}n";
}
print "The size of the hash is " . keys(%hash) . "n";
delete $hash{"New"};
print "The size of the hash is " . keys(%hash) . "n";
foreach $item ( keys(%hash) ) {
print $item . "-> $hash{$item}n";
}
즉 실제 저장되는 값의 타입들은 실행시에 결정되고 해석된다. 예를 들면, 변수 scalar와 num는 선언하는 방식에는 차이가 없다. 단지 실행시에 다른 값이 저장되었고 해석되었다. 문자열에 수를 더하면, 아래의 결과값이 보여주는 것처럼 문자열은 무시되고 수가 저장되었다.
I am scalar
3.4
4.4
1
DongJi
The size of list is 1
The size of list is 2
DaeGon
New-> Name
Lee-> DongJi
Kim-> HaYoung
The size of the hash is 3
The size of the hash is 2
Lee-> DongJi
Kim-> HaYoung
펄의 사용법은 매우 직관적이다. 펄의 변수들의 기본 사용법은 위 예제가 모두 보여주고 있다. 한 가지 짚고 넘어가고 싶은 점은 펄에서 코멘트 작성법이다. 펄에서는 코멘트를 작성하기 위해서는 #이 사용되는데, 그 이후에 나오는 것은 코멘트로 인식되며 여러 줄을 사용할 수 없다. 즉 C++나 자바에서 사용되는 /* … */ 와 같은 키워드는 없다. 위의 두 예제를 통해
펄이 직관적이며 사용하기 편한 스크립트 언어임을 보았다.
마지막으로 텍스트 처리에 유용함을 보여주는 예제로 기사를 마무리하는 것이 자연스럽지만, 간단한 예제로는 보여주기가 힘든 점도 있고, 필자의 목적이 이미 프로그램에 익숙한 사람들에게 펄이 어떤 언어인지 잠시 보여주고, 필자가 쓰려고 하는 RSS 관련기사에서 펄을 사용하기 위함이기 때문에 그러한 예제는 RSS관련 기사에서 제공하려고 한다. 이것은 또한 예제에 대한 설명이 매우 간단한 것에 대한 변명이 될 수도 있을 것이다.
여기서는 펄이 아주 다양한
정규 표현식을 통해 문자열을 쉽게 다룰 수 있게 한다는 사실 정도만 언급하므로써 기사를 마무리하고자 한다. 펄에 대한 자세한 사항은 ‘
Perl 프로그래밍’(한빛미디어)에서 찾아볼 수 있다.