|
|
1번째 줄: |
1번째 줄: |
− | '''Perl'''은 [[컴퓨터]] [[프로그래밍]] [[언어]]의 일종이다. 래리 월(Larry Wall)이 1987년 창시했고, 2013년 11월 현재 버전 5.18.1이 나와 있다.
| |
| | | |
− | == 창시 ==
| |
− | 래리 월(Larry Wall)이 계층구조를 갖춘 파일에서 리포트를 생성하는 작업을 [[awk]]로 구현하려다 난관에 부딛힌 것을 계기로 창시했다. 그는 Perl이 자기가 awk로 구현하려다 포기한 용도 말고도, 다른 일반적인 목적으로도 사용될 수 있기를 바랬고, 이를 위한 최소한의 사양을 덧붙여 공식적인 첫번째 버전의 Perl을 유즈넷(comp.sources.misc)에 공개했다. 이후 수많은 유즈넷 독자들의 요구사항과 의견에 맞추어 언어 사양과 구현을 개량해 나가면서, Perl은 본격적인 발전을 시작했다.
| |
− |
| |
− | "Perl"이라는 이름은 "pearl"에서 철자를 살짝 바꾼 것으로 그 자체에 특별한 의미는 없었으나, 나중에 '''P'''ractical '''E'''xtraction and '''R'''eport '''L'''anguage(실용적인 데이터 취득 및 리포트 작성 언어)라는 의미가 부여되었다. 실용성은 우수하지만 가독성이 낮은 코드를 작성하기 쉽다는 의미에서 '''P'''athologically '''E'''clectic '''R'''ubbish '''L'''ister(병적 절충주의 잡동사니 출력장치)라는 의미로도 사용된다. 양쪽 모두 래리 월이 공인한 별명이다!
| |
− |
| |
− | == 특성 ==
| |
− | 사용자가 신경써야 하는 별도의 컴파일 과정이 필요 없는 인터프리터 방식을 채택하고 있으나, 한줄 한줄씩 코드를 실행하는 쉘스크립트 등과는 달리 본격적인 실행 전에 전체 소스를 컴파일해 바이트코드를 만들어 낸 후, 한번에 실행한다. 코드 어딘가에 있는 문법 오류가 컴파일 과정에서 걸러지기 때문에 상대적으로 안전하고, 반복 실행시 다른 스크립트 언어에 비해 속도가 더 빠른 편이다.
| |
− |
| |
− | 애초에 래리가 펄을 창시한 계기가 텍스트 처리이기 때문에, 정규표현식을 이용한 검색과 조작에 특화되어 있다. 텍스트를 처리하는 속도로만 따지면 네이티브로 컴파일한 C언어 프로그램이랑 맞짱 뜰 정도로 빠르다! 반면 바이너리 처리나 실시간 연산에 쓰기에는 적합하지 않다. 보통 산업계에는 텍스트 처리나 DB연결에 쓰이거나, 서로 다른 언어로 구현된 프로그램 상에서 데이터 교환을 중재하는 glue language로서 활약하고 있다.
| |
− |
| |
− | === 문법 ===
| |
− | 데이터 타입에 따라 연산자의 구체적인 행동이 달라지는 현상은 어느 언어에서나 쉽게 찾아볼 수 있지만, 펄에서는 이 부분을 문맥(context)라는 개념으로 명확하게 이해하지 않으면 코드 해석이 어려울 수 있다. 같은 함수나 연산자라도 그게 스칼라(scalar) 문맥이냐 리스트(list) 문맥이냐 빈(void) 문맥이냐에 따라 의미하는 바가 다를 수 있다. 데이터를 숫자로 취급할지 문자로 취급할지도 문맥이란 개념으로 처리되며, 이를 위해 비교 연산자가 숫자문맥용으로 한 벌, 문자열 문맥으로 한 벌 마련되어 있다.<ref>예를 들어 '같음'을 의미하는 비교연산자는 숫자 버전으로 == 가 있고, 문자 버전으로 eq가 있다.</ref>그 외에도 자연언어적인 특성을 많이 가지고 있는데, 부분 평가 연산자나 표현식 변경자를 이용한 간단한 코드는 프로그래밍 언어가 일상언어처럼 자연스럽게 읽히는 신기방기한 현상을 만들어낸다.
| |
− |
| |
− | * <nowiki>open my $fh, '>', 'filename'</nowiki> '''or''' die;
| |
− | 파일을 열든가, '''아니면''' 죽어라! 는 뜻이다. 부분 평가 연산자 이용.
| |
− |
| |
− | * print 'Yo!' '''if'''<nowiki> $m>10;</nowiki>
| |
− | '''만약에''' <nowiki>$</nowiki>m이 10보다 크다면 Yo!를 출력하시오 라는 뜻이다. 표현식 변경자 이용.
| |
− |
| |
− | === 장점 ===
| |
− | 위처럼 복잡한 로직을 간결하게 표현할 수 있고, 언어 자체의 제약<ref>변수의 최댓값이 얼마로 제한되어 있다든지, 배열에 넣을 수 있는 아이템의 개수에 제한이 있다든지 하는, 주로 저수준 언어에서 프로그래머의 골치를 썩히는 제약들</ref> 을 최소화하는데 언어 구현의 촛점을 맞춘 덕에, 실용적으로 뭔가를 해결해나가는데는 최고의 도구로 꼽힌다. 입맛따라 만능으로 써먹을 수 있는 맥가이버 칼 같은 느낌이라고 하나.
| |
− |
| |
− | 쉘 스크립트의 대체재로 꼽히는데, 코드의 규모에 관계 없이 모듈화가 쉽고, CPAN에 이미 구현된 모듈들이 쌓여 있기 때문에 용도에 맞게 끌어다 쓸 수 있어 개발시간을 최소화 해 준다. Phtyon, Ruby와 같은 언어와 비교하면 속도와 하위호환성에서 강점을 보인다. <ref>Phtyon은 2에서 3으로 넘어가는 과정에서의 혼돈의 카오스가 아직 정돈되지 않았고, Ruby는 버전이 올라가면 잘 돌아가던 모듈들이 깨지는 경우가 빈번하게 발생한다.</ref>
| |
− | === 단점 ===
| |
− | '배우기 쉬움'보다 '써먹기 간편함'에 집중한 언어다 보니, 스크립트 언어 중에서는 진입장벽이 제법 높은 편에 속한다. | . ? @ $ % 같은 기호들이 가지는 함축적인 의미가 코드의 의미에 결정적인 영향을 주는 경우가 많기 때문에 '보면서 배우기'가 힘든 경우가 많다. 이는 펄에 꽤 익숙해진 후에도 마찬가지여서, 어설픈 개발자가 가독성이 개차반이고 유지보수가 어려운 코드를 생산할 위험성이 높다. 이에 대한 대안으로 use strict; 와 use warnings; 프라그마의 이용을 장려하고 있다.
| |
− |
| |
− | 의외로 유니코드 지원이 약하다. 유니코드 지원 모듈을 사용하지 않으면 이런저런 골룸한 상황에 처할 수 있다.
| |
− |
| |
− | == 철학 ==
| |
− | TIMTOWTDI(There is more than one way to do it)으로 유명하다. 아름답지 못한 코드라도 문제를 해결할 수 있으면 그만한 가치가 충분하다는 실용주의 철학을 대변한 말이다. 좀 더 자세히 알고 싶으면 [http://www.perl.or.kr/aboutperl/10methods 여기]를 참고하기 바람.
| |
− |
| |
− | == 한국에서의 펄 ==
| |
− | 한때는 전 세계적으로 [[WWW]]서비스를 구현하기 위한 가장 대중적인 언어였다. 한국도 예외는 아니여서, 세팔보드 같은 텍스트DB기반의 게시판 프로그램이 나온 적도 있었다. 하지만 펄이 꽉 잡고 있던 CGI의 자리를 [[PHP]]가 대체하면서 적어도 국내에서의 인기는 빠르게 사그라들었다. 커뮤니티도 거의 사멸되다시피 했고, 스크립트 언어로서의 지위마저 [[Phtyon]]에 자리를 내 준 상태.
| |
− |
| |
− | 다만 최근에는 언어 자체의 장점이 재조명되고 Modern Perl같은 사조가 흐름을 타면서 국내에서도 조금씩 커뮤니티가 살아나고 있다.
| |
− |
| |
− | == 외부 링크 ==
| |
− | * [http://perl.org 공식 홈페이지]
| |
− | * [http://perl.kr 한국 펄 커뮤니티 메타페이지]
| |
− |
| |
− | == 주석 ==
| |
− | <references />
| |
− |
| |
− | [[분류:컴퓨터공학]]
| |