Perl

공개
2016.05.22 16:06:15
조회수 31.1k 등록일 2016.05.22 16:13:57

Un*x, Linux에서는 파일의 Permission을 실행모드로 바꾸고, prompt상에서,


  1. hello.pl


이라고 하고, M$-Windows 계열에서는 ms-dos prompt상에서,

perl hello.pl


하면 됩니다. 물론 perl.exe가 PATH환경이나 현재 directory에 있다는 가정 하에서죠.( Mac에서는 Perl 윈도우에서 실행 메뉴를 통해서 실행합니다.) 그러면 화면상에,


  1. # hello.pl Hello World 


또는,

  1. C:\PERL> perl hello.pl 
  2. Hello World 


이라고 출력되겠지요...

조회수 31.2k 등록일 2016.05.22 16:11:51

언제나 그렇듯이 첫 프로그램은 바로 이겁니다.


  1. #!/usr/local/bin/perl 
  2. # hello.pl 
  3.  
  4. print "Hello World\n";


이것이 프로그램의 전부.

print는 다음의 문자열, 숫자, 변수 등을 표준 출력기인 STDOUT에 출력합니다. 참 쉽군요.

  • 맨 첫줄의 #!/usr/local/bin/perl은 UN*X, Linux등에서 필요한 것으로 perl의 Full Path입니다.
  • \n : C++의 \n과 같은 역할로써 커서를 다음줄 앞으로 보내는 겁니다. (new line)
  • # : 이 문자 이후부터 끝까지는 perl로부터 무시됩니다. 주석문이죠. 주석문을 잘 써 놓으면 나중에 프로그램을 읽을 때 쉽게 이해가 되겠죠.
  • ; : 한 명령문은 언제나 ;(colon)으로 끝납니다. 이것이 빠지면 다음 명령라인에 error가 발생합니다.

hello.pl은 짐작하시다시피 평범한 ascii 파일(text파일)입니다. 따라서 dos의 edit나 Windows 계열의 notepad, UN*X의 vi 등과 같은 프로그램으로 편집하면 되겠죠



조회수 31k 등록일 2016.05.22 16:07:37

Perl은 Larry Wall이 만든 Practical Extraction and Report Language라는 언어로 문서 형태의 데이터로부터 필요한 정보들을 추출(Extraction), 그 정보를 바탕으로 새로운 문서를 구성(Report)하는데 아주 잘 맞는 언어입니다.

perl은 한 때 HTTP, HTML이 부상하면서 CGI를 위한 언어로 각광 받았습니다.
하지만, 웹 프로그래밍을 하시는 많은 분들이 이미 알고 계시는 것처럼, CGI로서의 역할은 PHP와 같은 언어나, JSP, ASP 등의 등장으로 미미해집니다.
그러나, 웹의 부상과 CGI로서의 역할이라는 다소 표면적이고 번지르르한 허명뒤에는 또 다른 역할이 있었습니다.(물론 아직도 꼭 CGI가 필요한 곳에서는 막강한 힘을 발휘하고 있습니다. Apache 서버mod_perl이 바로 그 중 하나일 것입니다.)
그 것이 바로 "관리"를 위한 역할입니다.
관리는 시스템 관리만을 위한 것이 아닙니다. 시스템 관리는 물론이고, 데이터 관리, 웹 관련 관리 등 다양한 관리를 포함합니다.
여기 방문하시는 분들은 대부분 웹에 관심이 많으시니, 웹관련 관리에 대해 간단히 말해보겠습니다.
실제적인 사용자와의 인터페이스는 다른 언어에 맡긴다지만, 가장 쉽게 생각할 수 있는 perl의 또 다른 역할이 웹사이트의 방문기록을 분석하는 것입니다.
웹의 방문기록을 counter 프로그램을 이용하여 저장한다면, 그것은 약간 비효율적입니다. 그 보다는 Log 파일에 저장된 내용을 추후에 분석하는 것이 대개는 좋습니다.
이럴 때 perl을 사용하면 일이 매우 쉬워집니다. 다른 언어로 하기는 좀 억울한 면이 많을 것입니다. 왜냐하면 문자열을 다루는 데에는 perl이 최고니까요.
또, 만일 어떤 페이지의 내용이 30분이나 1시간에 한 번씩 바뀌어야 한다면(날씨관련 사이트처럼), 혹은 하루에 1, 2번 바뀌어야 한다면, perl을 이용하는 것이 가장 좋을 것입니다. 주기적으로 어떤 조건에 따라서 새로운 페이지를 생성하여 HTML로 저장한 다음 사용하는 것이, 매번 php나 jsp를 이용하여 생성하는 것보다는 훨씬 경제적이고 속도도 많이 빠를 것입니다.
서버가 아닌 클라이언트의 입장이 될 수도 있습니다.
어떤 페이지를 주기적으로 다운로드 받아서 분석한 후 데이터로 저장해야 한다면, 최고의 문자열처리 언어인 perl을 이용하는 것이 좋을 것입니다. 게다가 대상 페이지가 자주 변하는 것이라면 융통성있는 perl이 막강한 힘을 부여해 줄 것입니다.


그 외에 system 관리에는 거의 모든 분야에 perl을 이용할 수 있습니다. ``Perl for System Administration''이라는 Oreily의 책이 있다는 것을 혹시 아실지... perl 마니아나 시스템 관리자라면 반드시 한권은 가지고 있어야 할 책입니다. 앞으로 perl.or.kr을 활성화 시키면 중점으로 다룰 분야가 될 듯합니다.

데이터, 특히 문자열을 많이 사용하는 데이터라면 정말 ``왔담다!''.
저는 perl을 사용함으로써 이 분야에서 정말로, 무지무지, 덕을 많이 보았습니다.

그 외에도, 시스템 개발에서도 prototype 언어로 활용할 수도 있고(예를 들어 메일 서버를 구현하기 전에 perl로 실제로 구현해 보고, 이를 C와 같은 언어로 porting 한다든가...), 다른 언어의 code 생성에 template 기반의 tool로 사용할 수도 있는 등 그 쓰임새가 엄청납니다.

그 동안에 perl을 CGI 언어로만 인식해오던 분이 계신다면, 한 번쯤 다른 방향으로 perl을 보실 것을 권합니다.
이 곳의 게시판에도 방문하시는 많은 분들께서 CGI관련해서만 질문을 하셨습니다(DBI관련 빼고...). 그럴 때마다 저는 수면하에 있는 perl의 많은 능력을 간과하고 있는 것이 아닌가 하고 내심 안타까웠습니다. 물론, 저도 그 이상을 소개하지 않은 막중한 죄가 있습니다.

현재와 미래에 대해 말한다면, perl은 현재의 언어입니다. 현재의 문제를 해결하기 위해 사용하고, 현재를 강하게 숨쉬는 언어입니다. 그리고 우리는 언제나 현재를 살고 있는 만큼, 계속해서 이 언어를 필요로 할 것입니다. 만일 문자열을 다루는데, 이보다 더 강력한 언어가 나오지 않는다면, perl은 영원할 것입니다. 또, perl에는 정말로 강력한 community와 perl을 끝없이 확장할 수 있는 메커니즘이 존재합니다. http://www.cpan.org를 방문해 보신 분들은 그 것을 알 수 있습니다.


Perl의 특징

Perl에 관한 소개서들을 보면 이 언어가 C, sed, awk, sh등의 특징들을 결합한 것이어서 그러한 언어를 아는 사람들은 배우기가 쉽다고 하는데, 굳이 다른 언어를 모르더라도 배우는데 큰 지장은 없으리라 봅니다. www.perl.com사이트의 어딘가에는 Perl을 Entry-Level의 언어로 사용하는 것에 대한 글이 있는데, 저도 동감이었습니다. 쉽게 말해서. Perl은 쉽습니다 :-)

Perl은 더구나 HTML이나 사용자입력과 같은 텍스트를 다루는데 아주 강력한 기능을 가지고 있으므로 문자열 위주의 데이터을 다루기에는 최적의 언어라 할 수 있으며, UN*X, MVS, VMS, MS-DOS, Macintosh, OS/2, Amiga, Windows NT 등 여러 가지 Operating system에 Porting되어 있으므로 소스파일의 이식성이 뛰어납니다.

또 Perl은 강력한 사용자층을 가지고 있습니다. GURU급의 사용자, 개발자로부터 초보자에 이르기까지 Perl의 확장과 사용에 많은 시간과 정렬을 제공하는 사용자들이 CPAN의 많은 모듈을 만들고, 사용하고 고쳐나가면서 Perl의 발전에 힘쓰고 있습니다. 이 개발자, 사용자층이 있는 이상, Perl은 계속해서 발전할 것입니다.

C, C++같은 언어를 써보신 분들은 그 언어에서 문자열과 메모리의 관리가 얼마나 짜증나는 일인지 아실 겁니다. Perl은 그런 복잡한 것이 없습니다. 즉, 언어의 관리 보다는, 언어의 유용성에 촛점을 맞춘 언어입니다.

마지막으로 Perl은 무료입니다. Perl을 빛내주는 모듈들도 99.9999%가 무료입니다. 그리고 많은 프로그램들이 무료로 제공되고 있습니다.(간혹 그렇지 않은 경우도 있습니다.)

이제 하나 씩 살펴보겠습니다.