![]() /글쓴이: 글쓴이 소개: Guido는 오랫동안 리눅스 팬이었다. 최근 그는 LinuxFocus의 편집자로 활동하고 있다. 요즘 그는 집을 새롭게 단장하고 정원에 샐러드와 다른 것들을 심어 키우는데 무척 바쁘다. 차례: |
Abstract:
이 글은 Perl에 관한 연재기사의 첫번째 글입니다. 이 글을 읽기 위해 별도의 공부를 해야 한다든지 할 필요는 없습니다. C나 파스칼과 같은 절차형 프로그램 언어에 대한 약간의 지식을 가지고 있다면 Perl을 좀 더 쉽게 익힐 수 있을 것입니다.
Perl은 Larry Wall에 의해 개발된 스크립트언어이다. 즉 소스코드로부터 바로 실행된다.perl은 보통 /usr/local/perl에 설치되어 있다. perl은 어떤 점에서 보면 고전이 된 유닉스프로그램인 awk, sed와 비슷해 보이지만 차이점이 분명있다. 오늘날 유행이 된 객체지향프로그래밍을 한다거나 또는 그래픽사용자 인터페이스를 설계할 때에도 perl을 사용할 수 있다. Perl은 라이브러리를 이용하면 그 기능을 쉽게 확장할 수 있다. 이러한 라이브러리들은 CPAN에 모두 정리되어 있다. 이 글에서는 연재의 처음이므로 그렇게 고급주제까지는 다루지 않을 것이다. 먼저 몇가지 기본적인 사항을 살펴보고 점차 발전된 고급주제들을 다루기로 하자.
Perl은 매우 유용한 스크립트 언어이다. 약간의 프로그래밍 감각을 가지고 있으면 쉽게 익힐 수 있는 보편적 도구이다.
여기 프로그램 소스(my1stprg)를 눌러서 여러분의 컴퓨터에 저장하기 바란다. 그리고 권한을 변경해 주기 위하여
chmod 755 my1stprg
명령을 실행한다. 그리고 다음과 같이 실행해 보기 바란다.
#!/usr/bin/perl -w print "What is your name?\n"; $name=<STDIN>; #remove the new-line character: chomp($name); $len=length($name); print "\nHello $name! Your name is $len characters long\n"; |
코드를 살펴보자. 첫번째 줄은 명령어가 아니다. "#!"로 시작하는 줄들은 보통 유닉스 스크립트의 첫줄에 사용되며 운영체제에게 이 텍스트파일을 어떻게 실행해야 한다는 정보를 알려준다. 첫째줄이 아닌 곳에서 #으로 시작하는 줄이 있으면 그것은 주석문이다.(4번째 줄을 보면 알 수 있다.) 모든 문장은 세미콜론으로 끝나야 한다. 변수명은 달러($)표시로 시작한다. Perl의 변수는 문자나 정수, 부동소수점을 모두 취할 수 있다. 데이터형은 변수에 사용된 내용에 따라 자동으로 적절한 형으로 바뀐다. $로 시작하는 변수를 스칼라형 변수(scalar variable)이라고 한다. 만약 $대신 @로 시작한다면 그것은 배열이며 %로 시작하면 해쉬테이블이다. 이러한 변수형에 대해서는 다음회에 자세히 살펴보도록 하겠다.
두번째 줄에 사용된 print함수는 표준출력으로 문자열을 출력하는 함수이다. 이 함수는 쉘스크립트에서 echo명령과 비슷하다. 만약 큰따옴표안에 변수명이 사용되었으면 변수의 현재값으로 바뀐다. 작은따옴표안의 변수는 그 값으로 바뀌지 않는다.달러표시나 따옴표안에 따옴표를 표시하고자 할 경우에는 역슬래쉬를 이용한다. 예를 살펴보자:
#!/usr/bin/perl -w $name="joe"; print "1 $name\n"; print '2 ', $name , "\n"; print '3 ', '$name',"\n"; print "4 \"$name\"\n"; print "5 \$name\n"; print "6 \"\$name\"\n"; |
결과는 이렇게 될 것이다.:
1 joe 2 joe 3 $name 4 "joe" 5 $name 6 "$name" |
첫번째 예제프로그램을 다시 살펴보자. $name=<STDIN>;줄에서 프로그램은 사용자가 엔터키를 칠때까지 키보드 입력을기다릴 것이다. 그 다음줄에 변수 $name에는 NL(newline)문자까지 포함한 사용자 입력값을 가지고 있다. chomp($name);는 $name의 이 NL문자를 제거해준다. 마지막으로 length함수는 $name의 글자수를 알려준다.
이 프로그램에는 버그가 있다. 여러분의 이름 다음에 탭이나 공백을 입력해 보기 바한다. 잘 작동하는가? 이 버그를 어떻게 잡을 수 있을까?
먼저 이름에서 공백을 제거하기 위하여 찾기함수와 바꾸기함수가 필요하다. Perl은 문자열을 처리하는 기능이 매우 뛰어나며 이러한 기능을 정확하게 제공해 준다. [ \t]는 공백이나 탭을 나타내는 정규표현식이다. perl에서는 \s로 간단하게 나타낼 수도 있다. (관련기사 : 정규표현식). perl의 대체명령은 정규표현식을 취하므로 나름대로의 문법을 가지고 있다.: $name=~ s/regexp/replacement/g; 만약 여러분이 대체문장을 그대로 비워둔다면 정규표현식은 아무것도 없는 곳마다 일치되는 곳을 찾았다는 신호를 보내줄 것이다.이제 수정한 프로그램은 다음과 같다.:
#!/usr/bin/perl -w print "What is your name?\n"; $name=<STDIN>; #NL문자를 제거한다.: chomp($name); print "\nHello $name!"; #문자열에서 공백을 제거한다.: $name=~s/\s//g; $len=length($name); print " Your name is $len characters long\n"; |
이 프로그램은 사실 루프나 if같은 조건문등 제어에 관한 문장이 하나도 사용되어 있지 않기때문에 별로 유용한 프로그램은 아니다. 연재를 통하여 이 프로그램을 조금씩 복잡한 프로그램으로 확장시켜나가도록 하겠다.
물론 "man perl"과 "man perlfunc"을 통해서 어떤 함수를 이용할 수 있는지 찾아볼 수 있다. 여기에 좀 더 자세히 공부하고 싶다면 O'Reilly사에서 나온 "Learing Perl"등을 읽어보기 바란다.
웹페이지는 리눅스포커스 편집팀에서 관리합니다. © Guido Socher LinuxFocus 1999 |