Perl은 1987년 처음 공개된 이래 “Camel Book”으로 불리는 『Programming Perl』을 통해 프로그래밍 언어의 바이블로 자리매김했습니다. 최초의 대중적인 오픈 소스 언어이자 커뮤니티였던 Perl은 초기 동적 웹 페이지 개발의 압도적인 주역이었습니다.
Perl의 핵심적인 특징은 다음과 같습니다:
-
문자열 조작의 용이성: 정규 표현식을 통해 문자열을 매우 쉽게 다룰 수 있도록 설계되었습니다. 이는 최소한의 타이핑으로 복잡한 텍스트 작업을 가능하게 했습니다.
-
자연어적 유연성: 언어학적 배경을 가진 래리 월(Larry Wall)은 Perl이 자연어처럼 유연하기를 원했고, 그 결과 대부분의 작업을 여러 가지 방식으로 수행할 수 있게 되었습니다. 이러한 유연성은 강력했지만, 때로는 코드를 읽기 어렵게 만드는 요인이 되기도 했습니다.
Perl의 또 다른 혁신은 CPAN이었습니다. 1999년에 등장한 CPAN은 타사 패키지를 쉽게 찾고 설치할 수 있게 해주는 패키지 관리자로, 당시로서는 시대를 훨씬 앞서 나간 기능들을 제공하며 “마법”처럼 느껴졌습니다.
루비 개발자를 위한 Perl 문법의 주요 특징은 다음과 같습니다:
-
변수 시길(Sigils):
$(스칼라),@(리스트),%(해시),&(서브루틴)와 같은 접두사를 사용하여 변수의 타입을 명확히 구분합니다. 이는 파서가 변수 이름을 쉽게 식별하도록 돕습니다. -
자동 타입 변환: Perl은 숫자와 문자열 간의 자동 변환에 관대하며, 컨텍스트에 따라 리스트를 스칼라(예: 배열의 길이)로 변환합니다.
+는 덧셈,.은 문자열 연결로 명확히 구분됩니다. 이는 스크립트 작성 시 편리하지만, 대규모 코드베이스에서는 미묘한 버그의 원인이 될 수 있습니다. -
해시:
%시길을 사용하며, 키와 값이 번갈아 나오는 리스트나=>연산자를 통해 정의됩니다. 루비도 한때 이 문법을 사용했으나 현재는 폐기되었습니다. -
조건문:
0, 빈 문자열,"0"을 논리적 거짓으로 간주하며, 루비의elsif키워드의 유래가 되었습니다. -
문자열: 단일 및 이중 인용 부호 문자열을 지원하며, 변수 시길 덕분에
"$name"과 같이 변수 이름을 직접 포함할 수 있습니다.qw()와 같은 문자열 리스트 단축 문법과 임의 구분자 기능도 있습니다. -
전역 기본값
$_: 파일 읽기, 루프 인덱스 등으로 자동 설정되며, 많은 Perl 함수가 인수가 지정되지 않을 경우$_를 사용하고 결과도$_에 저장합니다. 이는 코드를 간결하게 만들지만 가독성을 떨어뜨릴 수 있습니다. -
정규 표현식: 루비와 유사한
/pattern/리터럴 문법을 가지며,$_에 대한 기본 매치,$1,$2등의 매치 변수,s///치환 연산자 등 강력한 기능을 제공합니다.
객체 지향적인 측면에서 Perl은 bless 함수를 사용하여 해시와 같은 데이터 구조를 특정 패키지(루비의 모듈과 유사)의 “인스턴스”로 만듭니다. 이는 루비의 실제 클래스와는 다른 접근 방식이며, Perl에는 private 개념이 없습니다.
루비는 Perl로부터 문자열/정규 표현식 리터럴, if 문, here docs, 사용자 정의 구분자, 변수 시길 사용, if/unless 수식어, 메서드의 return 생략 등 엄청난 양의 문법적 요소를 채택했습니다. 또한, “하나의 일을 하는 여러 가지 방법”이라는 Perl의 디자인 철학도 계승했습니다.
Perl의 인기가 시든 주된 이유는 2000년대 초반 동적 웹 페이지 개발에서 파이썬과 루비에 점유율을 잃었기 때문입니다. 특히 루비 온 레일즈와 같은 고수준 프레임워크가 Perl에서는 등장하지 않았습니다. 또한, Perl 6 (현재 Raku) 개발에 커뮤니티가 집중하면서 기존 Perl의 발전이 지연된 것도 한몫했습니다.