난이도 : 초급 Teodor Zlatanov, 프로그래머, Gold Software Systems
2000 년 9 월 01 일 "Programming Perl" 제3판은 Perl 커뮤니티에 있어서 의미 있는 발전이다. 제2판 이후 4년 만에 출간된 제3판은 새로 릴리즈 된 5.6.0에 대한 정보가 추가되었으며, 분량도 제2판의 두 배 정도 이다. Teodor Zlatanov는 책의 소개 외에도 이 책이 Perl 5.6.0의 달라진 부분을 얼마나 잘 반영하고 있는지를 설명한다.
Programming Perl 제3판은 시작부터 인상적이다. 페이지가 제2판의 거의 두 배 정도 분량이다. 표지의 TMTOWTDI("There's
More Than One Way To Do It; 어떤 일을 하는 데에는 한 가지 이상의 방법이 존재한다")슬로건과 저자들의
이름이 있는 것은 동일하며, 다만 오른쪽 상단 모서리에 배너가 붙어있다. 그러나 제2판과의 유사성은 단지 피상적일 뿐, 목차를
보면 이 책이 단지 개정판에 불과하다는 착각을 빨리 버릴 수 있다. 제3판은 Perl 5.003 이후로 Perl 언어에 있던
많은 변경 사항을 포함한다. 통일성과 일관성을 유지하면서 동시에 여러 섹션들이 확장 및 추가되었다.
저자들
Larry Wall과 Tom Christiansen은 그대로 남아있고, Randal L. Schwartz는 John Orwant로
대체되었다. Larry Wall은 Perl 언어의 창시자이다. Tom Christiansen은 Perl 온라인 문서 관리자로
알려져 있으며, The Perl Cookbook (Perl 프로그래머들에게 꼭 필요한 참고도서)의 핵심 저자이다. John Orwant는
O'Reilly & Associates의 기술담당 부사장이며 가장 저명하고 주목 받는 Perl 잡지인 The Perl Journal의
편집장이다. 제3판에서는 이전 판의 스타일이 유지된다. 적절한 예제를 곁들이 명쾌한 설명과 프로그래머들을 감동시키는 많은 joke가
본문에 많이 제시되었다.
편집자 Linda Mui와 기술편집자 Nathan Torkington도 역시 탁월한 작업을 수행하였다. 페이지의 분량을 고려하면
인상적일 만큼 오류가 거의 없다. O'Reilly의 웹 사이트(참고자료 참조)는
갱신된 정오표(errata)에 링크 되어 있다.
여기에서는 크게 두 부분을 나누어서 검토 할 것이다. 하나는 책 자체에 대한 리뷰이며, 다른 하나는 비록 다분히 피상적일 지라도
버전 5.003이후 Perl의 변경 부분에 대한 리뷰이다. Programming Perl의 제3판은 변경들을 다루지만, 5.004,
5.005, 5.6.0간의 특징들을 구분하지 않는다. 이 두 버전 사이에 중요한 차이가 있기 때문에 이는 안타까운 일이다. 따라서
5.003에서 5.005로 그리고 5.6.0로 바뀌면서 변경된 것들이 무엇인지 각각 비교할 필요가 있다.
"perldoc perldelta" 명령은 지난 버전 이후 변경된 것을 보여주므로, 5.6.0 을 설치할 때 5.005 이후의
변경된 것을 볼 수 있다. 마찬가지로 "perldoc perl5004delta"은 5.004에 어떤 변화가 있었는지 보여줄 것이다.
또한 Perl.com(참고자료 참조)에서 정보를 이용할 수 있으나, 이 책의 요약된
내용도 전문적이다.
새로운 사항들
5.003 릴리즈 이후 Perl에 많은 새로운 것들이 제공된다. 새로운 언어구조, 모듈, 프라그마 및 특성들이 풍부하다. 이하는
관련 perldoc 페이지에서 볼 수 있는, 사용자 측면의 변경 부분에 대한 개요이다. 이러한 개요는 작지만 중요한 변경 부분들이
생략되므로, 독자적으로 관련 참고 페이지를 찾아야 한다.
| 5.003 → 5.004 | 5.004 → 5.005 | 5.005 → 5.6.0 |
- 서브루틴 참조를 위한 더 나은 문법 ($ref->{parameters})
- 해시 슬라이스에서의 작업 삭제
- printf와 sprintf가 내부적으로 구현됨
- 해시 크기를 미리 할당(keys %hash = 2000)
- my가 제어구조에서 사용될 수 있다(foreach my $i (1..5) {}).
- VERSION의 사용은 Perl의 해당 버전을 필요로 한다(모듈들에도 또한 가능함).
- 새로운 OO 메소드 및 성능(isa, can)
- 모듈 자동로딩, 설치되지 않은 버전에 대한 테스트
- 상수 (use constant A => 5)
- CGI모듈
- CPAN모듈
- UNIVERSAL모듈
- Math::Complex, Math::Trig 모듈. 전 세계 수학자들에 대한 Perl의 약속을 지킴
- pod2html
- 새로운 다수의 perldocs
|
- 개선된 정규식(lookahead, code execution, conditional parts)
- (해시들 만큼 유용하고, 배열 만큼 신속한) 수도 해시들
- EXPR foreach EXPR 지원
- 더 나은 사전 처리 컴파일(precompile)된 정규식
- 더 나은 substr (match를 대체하여 사용 가능)
- 더 나은 splice (역으로 부정적인 의견도 있음)
- 원-라인(one-line) 루프 및 논리적인 구문
- Data::Dumper(없어서는 안될 디버깅 툴)
- File::Spec (포터블 파일 운영)
- Test (테스트 슈트 작성을 위해 사용)
- 새로운 다수의 perldocs
|
- 유니코드와 UTF-8의 지원
- 지정된 변수와 2진수 삽입
- 버전 스트링 (v-strings, e.g. 'v5.6.0')
- 새로운 서브루틴 속성 구문
- 큰 파일 지원(지원되면, 2GB 이상)
- POSIX 문자 클래스
- exists() and delete()가 배열 요소들에 사용될 수 있다.
- 더 나은 수도 해시들 (필드 프라그마 사용)
- 더 나은 벤치마크 모듈
- Java Perl Lingo 포함
- Term::ANSIColor(지원되는 곳에서 색 출력)
- 새로운 다수의 perldocs
|
 |

|
Overview와 gory details
Overview 섹션들은 제 2판에서 거의 바뀌지 않고 있다. 그러나 적절한 재미를 곁들여 여전히 Perl 언어에 대해 충분한
소개를 하고 있다.
언어의 더욱 상세한 개요는 제2장에서부터 제4장까지 이어진다. 매우 중요한 "use constant" 프라그마를 포함하여 내용이
적절하게 갱신되어 있다. 지금까지는 제2판과 큰 차이는 없다.
Pattern matching
Pattern matching 은 새로 추가된 부분이다. 제2판은 이러한 복잡한 주제에 단지 35페이지를 할애하는 반면, 제3판은
거의 80페이지에 달한다. 많은 예제와 발전되고 새로운 것들이 깊이 있게 설명된다. 어디서부터 시작할까? Lookahead,
cloistered modifiers, conditional sections, named characters들이 모두 포함되어
있다. 네임드 캐릭터(named character)들과 캐릭터 클래스(character class)들은 유니코드를 사용할 수
있으며, 그에 대한 예제들이 있다. 또한 POSIX 문자 클래스들의 리스트가 있다.
Pattern matching에서는 Perl의 매력적인 측면을 익히기에 충분하다. 모든 것을 정규식(regular expressions)으로
처리하지 않을 것을 경고하며, Perl 초보자들이 주의해야 할 사항들에 대해서도 기술되었다. 이 chapter에서 정규식(regular
expressions)에 대한 모든 애플리케이션을 이해하기는 가능하다. 정규식에 대한 더욱 자세한 설명은 Mastering Regular
Expressions (Jeffrey E. F. Friedl-참고자료)를 참고하면
된다.
Subroutines, references, and data structures
Subroutine은 새로운 문법(프로토 타입과 속성) 및 매우 새로운 lvalue 속성(5.6.0에서)에 대해 설명한다. 서브루틴의
리턴 값을 수정할 수 있다고 상상해보라! 지금까지는 모든 객체속성을 수정하려면 특별한 주의가 필요했다. lvalue 서브루틴을
사용하여 서브루틴에서 리턴된 스칼라들에 직접 손을 댈 수 있다. 프로토 타입은 또 다른 중요한 특징이며, [old function]으로
갱신하는 것으로 사용하는 것을 제외하고는, 필요할 땐 항상 사용할 수 있다. 이 장은 분량은 작지만, 매우 중요하다.
references는 데이터 구조와 패싱(passing) 값에 대해 알아야 할 사용자들이라면 도움이 되고 중요한 장이다. 익명
데이터(어레이, 해시, 서브루틴), 클로져(closures), 수도해시(pseudohashes), 해시슬라이스(hash slices),
윅 레퍼런스 등이 세부적으로 설명되어 있다. 예제 역시 훌륭하며 유용하다. 수도해시에 대한 내용은 속도를 요하는 네임드 필드로
클래스를 기술하려는 사용자에게 특히 유용하다.
Perl로 복잡한 데이터구조를 실행하는 사용자들을 위해 필요한 Mastering Algorithms with Perl(Jon
Orwant, Jarkko Hietaniemi, John Macdonald 공저-참고자료 참조)이라는 책도 있지만, 이 책의
data structure 부분 역시 완벽하고 유용하다. 또한 여기서는 저장 및 복구데이터로 사용되는 필수적인 Data::Dumper
모듈을 언급한다.
Formats
format에서는 현재 폭 넓게 사용되지는 않는 Perl 특징을 설명한다. 이는 FORTRAN의 출력 포멧팅 키워드 및 BASIC의
출력 레이아웃 그리고 nroff의 개념을 조합한 것이다. 만약 이 3가지 중에 어느 하나를 사용했다면, 포맷의 편리성 및 유용성을
발견할 것이다. 이 장은 일부분이었는데 지금은 한 장(chapter)으로 구성되었다는 것 외에는 크게 새로울 것은 없다. 불과
6페이지로 구성되어 있어, 장(chapter)을 분리시킨 이유를 이해하기 어렵다.
Packages, modules, objects, overloading, and
tied variables
Programming Perl의 제2판에서는 객체 지향 프로그래밍이 강조되지 않았다. 객체를 다루는 부분이 작으며,
Perl에서의 강력한 OO 방법론에 대한 설명이 거의 없다. 이것이 제3판에서 바뀐점이다. 비록, 다소 소홀한 점이 있지만,
objects 에서는 Perl의 OO을 더욱 길고 상세하게 설명한다. UNIVERSAL class의 isa()와 can() 메소드,
Class::Struct, 그리고 lvalue class 메소드들이 친절하게 설명되어있다.
패키지와 모듈은 모든 Perl 프로그래머에게 중요하다. 이 장은 제2판보다 다소 길어졌다. 하지만, 각각 단지 몇 페이지에
불과하므로 아마도 한 장으로 합쳐졌어야 했다. 이 부분은 Perl 코드 재사용에 관심 있는 사용자에게 중요한 자료이다. 하지만,
새로운 예제들과 특징들을 제외하면 제 2판 이후로 새로운 것이 거의 없다. 예를 들면, 요구되는 묘듈 버전 (MODULE VERSION
사용)에 대한 내용이 포함된 정도이다.
연산자 재정의를 다루는 overloading은 내용이 많고 유용하다. 게다가, 제2판이 출간될 당시의 Perl에서는 Perl의
연산자를 중복 정의할 방법이 없었기 때문에, 이는 완전히 새로운 내용이다. 이점은 언어의 중요한 변화이며, 이점을 잘 기술하고
있다. 단순한 것 (가/감 연산자 중복정의)에서부터 복잡한 것(상수 중복정의 및 런타임 중복정의)에 이르는 많은 예제가 포함된다.
Tied variables(결합 변수)는 이 유용한 기술을 설명하며, filehandle 결합 메소드 및 CPAN의 Tie
모듈의 설명으로 갱신되었다. 표준 스칼라, 어레이, 해시 결합 메소드에 대한 더 많은 예제와 세부사항을 포함한다.
Unicode
유니코드를 지원하는 것은 쉽지 않은 일이다. 이 장에서는 그 이유를 설명한다. UTF-8은 Perl이 가장 잘 구현한 것 중의
하나이다. 유니코드 협회에 의해 규정된 다른 것들(예를 들면, UTF-16과 UTF-32)이 있지만, UTF-8은 국제적인 문자세트에
필요한 인코딩을 지원한다. 이 장 후반부의 유니코드 리소스에서 Perl, 유니코드, 그리고 I18N(국제화)에 대한 FAQ가
Perl 5.6.0에서 무엇이 이루어졌는지 보다 완전하게 그림을 제시할 것이다. 이 책은 문자 맵핑으로서의 유니코드와 UTF-8
인코딩을 뚜렷하게 구분하지는 않는다.
UTF-8 인코딩으로 작성되어 변수명이 ASCII 문자가 아닌 문자를 사용하는 Perl 프로그램을 보여주는 명쾌한 예제도 있다.
Perl이 자체 언어를 표현할 만큼 충분히 유연성이 가질 때, Perl 공동체로 사용자를 유도하는 것이 더욱 쉬워질 것이다.
현재의 Perl 5.6.0에서 유니코드의 지원은 잘 진행되어 가고 있다. 그러나 아직은 완벽한 것이 아니므로 주의할 필요가
있다. CPAN 유니코드 모듈이 5.6.0과 기존의 구 버전인 Perl에서 제대로 작동되며, 적절하게 사용할 수 있다. 또한
UTF-8 인코딩 지원을 위해 Linux에서 xterm 및 mutt 같은 단순한 애플리케이션을 도입하는 것이 필요 없을 수도
있다. UTF-8은 매우 새로운 표준이며, 소프트웨어에서 서서히 지원되기 시작했다. Perl은 현재 유니코드 지원에 있어 자바에게
뒤지며, 그것은 처음부터 자바가 유니코드 지원용으로 고안되었기 때문에 놀라운 것은 아니다.
IPC와 Threads
IPC(Inter-Process Communication)는 제2판의 IPC부분을 확장한 버전이다. 새롭고 더 나은 예제들이
제공되며, IO::Soket::INET와 같은 모듈이 네트워크 서버를 작성하는 자질구레한 작업을 얼마나 단순화시키는지 주목할
만하다. 또한, CR/LF를 보내기 위한 새로운 v-string 들을 사용하는 좋은 예제를 보여준다.
쓰레드는 Perl 5.6.0 에서 최종적인 안정된 특징을 가지며, 쓰레드 프로그래밍을 시작함에 있어서 좋은 자료로 사용할 수
있다. 알고리즘적인 접근, 모두가 좋아하고 또한 싫어하는 UNIX fork 기반 쓰레딩 모델의 정당성, 그리고 lock 함수와
서브루틴 속성의 사용을 설명하는 좋은 예제들이 있다. 쓰레드 Perl 번역기가 평범한 번역기보다 더 느리게 실행되기 때문에,
명확하게 쓰레드를 지원하도록 Perl 프로그래밍을 해야 한다.
CLI와 debugging
CLI(command-line interface)는 필독 부분이다. 이 장의 모든 정보는, 여러분이 -p 스위치를 사용하거나
또는 PERL5LIB 변수를 사용하게 될 미래에 확실히 시간을 절약해 줄 수 있다. 철저하게 공부하기 바란다. 이 장은 제2판의
관련 부분이 갱신된 것이며, Perl 번역기에 영향을 주는 환경 변수에 대한 더 많은 정보를 포함한다는 것이 주목할 만하다.
슬픈 것은, debugging 에서 언급되어야 할 것이 누락되었다는 점이다. 강력성 및 정밀성에도 불구하고, 내장 Perl
디버거는 CPAN에서 이용할 수 있는 ptkdb 디버거와 가깝지 않다. CAPN에서 ptkdb를 검토하면 그것이 매우 유용한
툴인 것에 동의할 것이다. ptkdb는 모든 플랫폼에서 작동하지 않으므로(Tk 모듈을 필요로 함) 생략될 수 있지만, 이러한
강력하고 유용한 툴에 대해 간략하게 언급하는 것이 좋았을 것이다. 여러분이 내장 디버거를 더 선호하거나 또는 ptkdb가 실행되지
않는 플랫폼에서라면 이 장은 분명히 유용한 것이다. 제 2판보다 10페이지 이상 늘어났으며 기술적인 정보와 예제가 제공되고 있다.
비록, 셋업 및 사용에 대한 상세한 설명이 없지만, Emacs을 이용한 상호 운용에 대해서도 언급된다.
Compiling과 internals
Compiling은 Perl 인터널에 대한 모든 사항이 제공된다. 이 장은 기술적 마인드를 가진 사용자들에게 매우 유용한 자료이며,
BEGIN/END/CHECK/INIT 서브 루틴 및 모듈의 작동 방법을 이해하는데 도움이 된다.
Internals 는 Compiling 에 흡수되어도 무방했다. 이 장은, 프로그램에 Perl을 삽입하거나 C코드를 사용하여
Perl을 확장하는 등 대부분의 Perl 사용자에게 있어서 신비로운 주제에 해당되는 것을 훌륭하게 소개하고 있다. 지나치게 간결한
것이 안타깝긴 하지만, 이는 이 책의 내용이 초급에서 중급 사용자 수준을 대상으로 하는 일관성을 유지하기 위해서 일 것이다.
Perl culture
제3판의 가장 흥미진진한 것이 바로 "Perl as Culture" 부분일 것이다, 그것은 단지 언어로서의 Perl 그 이상을
만들어주는 공동체에 대한 이야기이다. 이 장은 제2판에서 몇 개의 섹션이 확장된 것으로 매우 재미있게 읽을 수 있다.
CAPN은 Perl 개발을 본격적으로 하는 개발자들의 출발점이다. CAPN은 Perl 모듈의 최상의 자료이다.
Security는 제2판보다 매우 확장되었다. 이것은 실질적인 조언과 유용한 여러 섹션을 포함한다. 기존 4페이지가 25페이지
정도가 되었고, 모두가 중요하다. CGI 모듈을 포함하지만 그에 한정시키지는 않는, CGI 프로그램에 있어서의 보안문제에 관한
정보를 제공한다.
common practices, writing portable Perl, POD (Plain Old Documentation),
그리고 Perl culture는 글이 매우 훌륭하고 업데이트도 잘 되었다. 또한 예제들도 훌륭하다. 이 장들은 Perl 공동체에
적극적이든 소극적이든 참여를 하고 있는 사람이면 누구든지 읽어야 할 것들이다. 흑진주("Black Perl")와도 같은 주옥
같은 내용들이 많이 있다.
Special names, functions, pragmas, and standard
modules
Special names, functions, pragmas, 그리고 standard modules 부분은 거의 완벽하게 설명이
되어있다. 새로운 특징을 갱신한 것이 특히 환영할 만하며, 예제들은 Perl 5.6.0을 보다 친근하게 해주는 좋은 역할을 한다.
제2판에서 다른 부가적인 내용(제3판에서 여러 장으로 나뉘어진 "Perl as Culture")의 이전에 위치했었던 기술적인
참고자료들이 제3판에서는 책의 후반부에 기술되고 있다는 점도 좋다.
모듈과 함수들의 유니코드 컴플라이언스의 per-함수와 per-모듈에 관심 있는 사람들에게 유용했을 것이다. 그러나, 유니코드
부분에서 기술된 Perl에 모든 것들이 "use utf8" 프라그마에 순응하는 유니코드를 신비스럽게 할 수 있다. 유니코드를
준수하는 모듈과 함수에 대한 논의는 per-함수와 per-모듈에 관심 있는 사람들에게 유용할지도 모른다. 그러나, "use utf8"
프라그마를 사용하여 유니코드를 준수할 수 있는 모든 것을 유니코드 부분에서 다루었다면 좋았을 것이다.
결론
제3판은 Perl 역사에 있어 큰 이벤트나 다름없다. 버전 5.6.0의 릴리즈는 Perl 공동체에서 많은 소프트웨어 개선을 이룰
수 있도록 했지만, 반면 제2판은 구식이 되버렸다. 이 격차는 제3판이 나옴으로써 제거되었다. 단순히 내용이 갱신된 것 이상이다.
몇 섹션은 완전히 새로운 것이며, 다른 부분들은 제2판에서 기존 분량의 거의 두 배에 해당한다. 또한 새로운 모듈, 프라그마,
함수 및 특성을 훌륭한 예제를 통해 보여준다. 단지 그렇기 때문에 Perl 프로그래머가 Programming Perl의
제 3판의 구입을 고려할 수도 있지만, 무엇보다도 이 책은 Perl 언어의 가장 확실하고 훌륭한 레퍼런스이라는 사실이 이유가
될 것이다.
참고자료
필자소개  | | Teodor Zlatanov 는 1999년 보스톤 대학에서 컴퓨터 공학 석사학위 취득했다. Perl,
Java, C++ 를 사용하여, 1992년부터 프로그래머로 일하고 있다. 주요 관심 부분은 text parsing, 3-tier
클라이언트/서버 데이터베이스 아키텍처, UNIX 시스템 관리, CORBA 및 프로젝트 관리에 대한 오픈 소스 작업이다. |
기사에 대한 평가
|