Perl

누리위키, 온 누리의 백과사전

Perl컴퓨터 프로그래밍 언어의 일종이다. 래리 월(Larry Wall)이 1987년 창시했고, 2013년 11월 현재 버전 5.18.1이 나와 있다.

창시[편집]

래리 월(Larry Wall)이 계층구조를 갖춘 파일에서 리포트를 생성하는 작업을 awk로 구현하려다 난관에 부딛힌 것을 계기로 창시했다. 그는 Perl이 자기가 awk로 구현하려다 포기한 용도 말고도, 다른 일반적인 목적으로도 사용될 수 있기를 바랬고, 이를 위한 최소한의 사양을 덧붙여 공식적인 첫번째 버전의 Perl을 유즈넷(comp.sources.misc)에 공개했다. 이후 수많은 유즈넷 독자들의 요구사항과 의견에 맞추어 언어 사양과 구현을 개량해 나가면서, Perl은 본격적인 발전을 시작했다.

"Perl"이라는 이름은 "pearl"에서 철자를 살짝 바꾼 것으로 그 자체에 특별한 의미는 없었으나, 나중에 Practical Extraction and Report Language(실용적인 데이터 취득 및 리포트 작성 언어)라는 의미가 부여되었다. 실용성은 우수하지만 가독성이 낮은 코드를 작성하기 쉽다는 의미에서 Pathologically Eclectic Rubbish Lister(병적 절충주의 잡동사니 출력장치)라는 의미로도 사용된다. 양쪽 모두 래리 월이 공인한 별명이다!

특성[편집]

사용자가 신경써야 하는 별도의 컴파일 과정이 필요 없는 인터프리터 방식을 채택하고 있으나, 한줄 한줄씩 코드를 실행하는 쉘스크립트 등과는 달리 본격적인 실행 전에 전체 소스를 컴파일해 바이트코드를 만들어 낸 후, 한번에 실행한다. 코드 어딘가에 있는 문법 오류가 컴파일 과정에서 걸러지기 때문에 상대적으로 안전하고, 반복 실행시 다른 스크립트 언어에 비해 속도가 더 빠른 편이다.

애초에 래리가 펄을 창시한 계기가 텍스트 처리이기 때문에, 정규표현식을 이용한 검색과 조작에 특화되어 있다. 텍스트를 처리하는 속도로만 따지면 네이티브로 컴파일한 C언어 프로그램이랑 맞짱 뜰 정도로 빠르다! 반면 바이너리 처리나 실시간 연산에 쓰기에는 적합하지 않다. 보통 산업계에는 텍스트 처리나 DB연결에 쓰이거나, 서로 다른 언어로 구현된 프로그램 상에서 데이터 교환을 중재하는 glue language로서 활약하고 있다.

문법[편집]

데이터 타입에 따라 연산자의 구체적인 행동이 달라지는 현상은 어느 언어에서나 쉽게 찾아볼 수 있지만, 펄에서는 이 부분을 문맥(context)라는 개념으로 명확하게 이해하지 않으면 코드 해석이 어려울 수 있다. 같은 함수나 연산자라도 그게 스칼라(scalar) 문맥이냐 리스트(list) 문맥이냐 빈(void) 문맥이냐에 따라 의미하는 바가 다를 수 있다. 데이터를 숫자로 취급할지 문자로 취급할지도 문맥이란 개념으로 처리되며, 이를 위해 비교 연산자가 숫자문맥용으로 한 벌, 문자열 문맥으로 한 벌 마련되어 있다.[1]그 외에도 자연언어적인 특성을 많이 가지고 있는데, 부분 평가 연산자나 표현식 변경자를 이용한 간단한 코드는 프로그래밍 언어가 일상언어처럼 자연스럽게 읽히는 신기방기한 현상을 만들어낸다.

  • open my $fh, '>', 'filename' or die;

파일을 열든가, 아니면 죽어라! 는 뜻이다. 부분 평가 연산자 이용.

  • print 'Yo!' if $m>10;

만약에 $m이 10보다 크다면 Yo!를 출력하시오 라는 뜻이다. 표현식 변경자 이용.

장점[편집]

위처럼 복잡한 로직을 간결하게 표현할 수 있고, 언어 자체의 제약[2] 을 최소화하는데 언어 구현의 촛점을 맞춘 덕에, 실용적으로 뭔가를 해결해나가는데는 최고의 도구로 꼽힌다. 입맛따라 만능으로 써먹을 수 있는 맥가이버 칼 같은 느낌이라고 하나.

쉘 스크립트의 대체재로 꼽히는데, 코드의 규모에 관계 없이 모듈화가 쉽고, CPAN에 이미 구현된 모듈들이 쌓여 있기 때문에 용도에 맞게 끌어다 쓸 수 있어 개발시간을 최소화 해 준다. Phtyon, Ruby와 같은 언어와 비교하면 속도와 하위호환성에서 강점을 보인다. [3]

단점[편집]

'배우기 쉬움'보다 '써먹기 간편함'에 집중한 언어다 보니, 스크립트 언어 중에서는 진입장벽이 제법 높은 편에 속한다. | . ? @ $ % 같은 기호들이 가지는 함축적인 의미가 코드의 의미에 결정적인 영향을 주는 경우가 많기 때문에 '보면서 배우기'가 힘든 경우가 많다. 이는 펄에 꽤 익숙해진 후에도 마찬가지여서, 어설픈 개발자가 가독성이 개차반이고 유지보수가 어려운 코드를 생산할 위험성이 높다. 이에 대한 대안으로 use strict; 와 use warnings; 프라그마의 이용을 장려하고 있다.

의외로 유니코드 지원이 약하다. 유니코드 지원 모듈을 사용하지 않으면 이런저런 골룸한 상황에 처할 수 있다.

철학[편집]

TIMTOWTDI(There is more than one way to do it)으로 유명하다. 아름답지 못한 코드라도 문제를 해결할 수 있으면 그만한 가치가 충분하다는 실용주의 철학을 대변한 말이다. 좀 더 자세히 알고 싶으면 여기를 참고하기 바람.

한국에서의 펄[편집]

한때는 전 세계적으로 WWW서비스를 구현하기 위한 가장 대중적인 언어였다. 한국도 예외는 아니여서, 세팔보드 같은 텍스트DB기반의 게시판 프로그램이 나온 적도 있었다. 하지만 펄이 꽉 잡고 있던 CGI의 자리를 PHP가 대체하면서 적어도 국내에서의 인기는 빠르게 사그라들었다. 커뮤니티도 거의 사멸되다시피 했고, 스크립트 언어로서의 지위마저 Phtyon에 자리를 내 준 상태.

다만 최근에는 언어 자체의 장점이 재조명되고 Modern Perl같은 사조가 흐름을 타면서 국내에서도 조금씩 커뮤니티가 살아나고 있다.

외부 링크[편집]

주석[편집]

  1. ^ 예를 들어 '같음'을 의미하는 비교연산자는 숫자 버전으로 == 가 있고, 문자 버전으로 eq가 있다.
  2. ^ 변수의 최댓값이 얼마로 제한되어 있다든지, 배열에 넣을 수 있는 아이템의 개수에 제한이 있다든지 하는, 주로 저수준 언어에서 프로그래머의 골치를 썩히는 제약들
  3. ^ Phtyon은 2에서 3으로 넘어가는 과정에서의 혼돈의 카오스가 아직 정돈되지 않았고, Ruby는 버전이 올라가면 잘 돌아가던 모듈들이 깨지는 경우가 빈번하게 발생한다.