レベル: 初級 Teodor Zlatanov (tzz@bu.edu), Programmer, Gold Software Systems
2000年 9月 01日 Programming Perl 第 3 版のリリースは、Perl コミュニティーにとっての重要な展開です。4 年の期間を経て この名著は更新され、新規の 5.6.0 リリースに関する情報および新しいセクションが追加され、ページ数が第 2 版の 2 倍近くになりました。Teodor Zlatanov は、本書をレビューするだけでなく、Perl の 5.6.0 リリースまで行われた変更を本書がどの程度反映しているかも調べています。
Programming Perlの第 3 版は、出だしから印象的です。第 3 版は、第 2 版の約 2 倍のページ数です。カバーは同じですが、右上隅に控え目のバナー、最上部に TMTOWTDI ("There's More Than One Way To Do It") スローガン および共著者のリストが示されている点が異なります。しかし、似ているのは表面だけで、目次を見れば、本書が単なる改訂に過ぎないのではないか、という誤解をすぐに吹き飛ばしてしまいます。第 3 版には、V5.003 以降に Perl 言語に対して行われた多くの変更が取り入れられています。第 3 版では、まとまりと一貫性を保持しながら、多くのセクションが拡張・作成されています。
著者
Larry Wall と Tom Christiansen はこの版に再登場しましたが、Randal L. Schwartz は Jon Orwant と入れ替わりました。Larry Wall は、Perl 言語の作成者です。Tom Christiansen は、Perl オンライン文書の管理人として知られている人ですが、「Perl クックブック (The Perl Cookbook)」 (Perl プログラマーにとって不可欠な本) の代表著者です。Jon Orwant は、O'Reilly & Associates のチーフ・テクノロジー・オフィサーであり、また、最もよく知られ、最も高い評価を受けている「Perl ジャーナル (The Perl Journal)」の編集主幹でもあります。旧版のスタイルは保持されています。本文には、分かりやすい説明に伴って、プログラマーの心に触れる適切な例や多くのジョークが随所に示されています。
エディターの Linda Mui とテクニカル・エディターの Nathan Torkington も、すばらしい仕事をしました。本書にはほとんどエラーも見られず、ページ数を考えたら、これは驚くべきことです。O'Reilly Web サイト (「参考文献」を参照) には、更新された正誤表へのリンクが設けられています。
このレビューには、2 つのキー・エレメントがあります。この記事は本書のレビューですが、V5.003 以降に行われた Perl の変更のレビューでもあります (ただし、こちらの方は、通り一遍のレビューですが)。「プログラミング Perl (Programming Perl)」 第 3 版にはこれらの変更が 説明されていますが、5.004、5.005、5.6.0 間のフィーチャーの区別はされておりません。これは残念なことです。なぜならば、この 2 つの版の間には大きな違いがあり、たとえば、5.005 を実行する多くの Perl サイトは、5.003 から 5.005 への変更に比べて、5.6.0 でどこが変更されたかを知る必要があります。
"perldoc perldelta" コマンドは、最後のバージョン以降に行われた変更を示しますので、5.6.0 のインストールでは、5.005 以降に行われた変更を確認することができます。同様に、"perldoc perl5004delta" は 5.004 以降に行われた変更を示します。この情報は、Perl.com の Web からも提供されます (「参考文献」を参照) が、それはかなり技術的なものであり、本書にはもっとやさしい要約を設けるべきでした。
新規機能
5.003 リリース以降、Perl には多くの新規機能が組み込まれています。新しい言語構造体、モジュール、pragma、機能など、たくさんあります。以下に、関連する 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) {})
- 使用バージョンにはそのバージョンの Perl が必要 (モジュールの場合も可能)
- 新規の OO メソッドおよび機能 (isa、can)
- モジュール自動ロード、アンインストールされたバージョンのテスト
- 定数 (使用定数 A => 5)
- CGI モジュール
- CPAN モジュール
- UNIVERSAL モジュール
- Math::Complex、Math::Trig モジュール、Perl の全世界の数学者に対するコミットメントの確認
- pod2html
- 多くの新規 perldocs
|
- 正規表現の改善 (先読み、コード実行、条件付きパーツ)
- 疑似ハッシュ (ハッシュと同様に有用で、配列と同様に迅速)
- 各 EXPR サポートごとの EXPR
- プリコンパイル済み正規表現の改善
- 減算の改善 (一致も置き換え可能)
- splice の改良 (負の引数による逆方向作用)
- 1 行ループおよび論理ステートメント
- Data::Dumper (不可欠なデバッグ・ツール)
- File::Spec (ポータブル・ファイル・オペレーション)
- テスト (テスト・スイート作成用)
- 多くの新規 perldoc
|
- Unicode および UTF-8 サポート
- 挿入名前付き文字および 2 進数
- バージョン・ストリング (v-strings。たとえば、'v5.6.0')
- 新規のサブルーチン属性構文
- ラージ・ファイル・サポート (サポートされる場合、2GB を超えるサイズ)
- POSIX 文字クラス
- exists() および delete() が配列要素で使用可能
- 疑似ハッシュの改良 (フィールド pragma の使用)
- ベンチマーク・モジュールの改良
- Java Perl Lingo の組み込み
- Term::ANSIColor (サポートされる場合、カラー出力)
- 多くの新規 perldoc
|

 |
概要および詳細
概要セクションは第 2 版からほとんど変わっていませんが、引き続き、"程よい程度の面白さ" を織り混ぜて、Perl 言語の適切な紹介を記載しています。
この言語のより詳しい説明が、第 2 章 ~ 第 4 章で行われています。貴重な "使用定数" pragma を含め、すべての該当個所で内容が更新されています。もう一度言いますが、これまでのところ、第 2 版とほとんど違いはありません。
パターン・マッチング
パターン・マッチングに関する章は、新しく設けられたものです。第 2 版では、この難しいトピックに 35 ページしか割かれていませんでしたが、第 3 版では、約 80 ページの説明が設けられています。ここでは、すべてのフィーチャーに例が示され、新しいフィーチャーについては、詳しい説明がなされています。どこから始めますか? 先読み、cloistered 修飾子、条件付きセクション、名前付き文字などは、すべてそこに含まれています。名前付き文字と文字クラスは Unicode 対応になっていて、それぞれに例が示されています。POSIX 文字クラスもリストされています。
パターン・マッチングの章は、Perl のこの魅力的な側面を学ぶのに十分です。そこには、有用な警告が盛られていて (たとえば、「正規表現ですべてのことをやろうとしてはならない」)、これはすべての Perl 初心者が避けるべきものです。しかし、1 つの章で正規表現のすべてのアプリケーションを把握するのは不可能であり、さらに詳しい情報に興味のある方は、Jeffrey E. F. Friedl 著「正規表現をマスターする (Mastering Regular Expressions)」 (「参考文献」を参照) を読んでみることです。
サブルーチン、参照、およびデータ構造
サブルーチンの章では、新規の構文 (プロトタイプと属性)、および最新の lvalue 属性 (5.6.0 の場合) を説明しています。サブルーチンの戻り値を修正できると仮定した場合を想像してみてください。これまでは、たとえば、オブジェクト属性の修正を行うには特別の注意が必要でした。lvalue サブルーチンを使用すれば、サブルーチンから戻されたスカラーを直接扱うことができます。プロトタイプはもう 1 つの重要なフィーチャーであり、可能な限り常に使用すべきものです (しかし、"プロトタイプを [古い機能] に改善" してはなりません)。この章は短いですが、重要な章です。
データ構造や Perl との値の受け渡しを学ぶ必要のある人にとっては、参照に関する章は重要です。匿名データ (配列、ハッシュ、およびサブルーチン)、閉止、疑似ハッシュ、ハッシュ・スライス、および弱い参照について、詳しい説明が記載されています。いつものとおり、適切な例示が盛られています。スピードを必要とする名前付きフィールドを持つクラスを作成する人にとって、疑似ハッシュの説明は、特に有用です。
データ構造の章は、詳細にわたって記述されており、参考になります。ただし、Jon Orwant、Jarkko Hietaniemi、および John Macdonald の共著「Perl でアルゴリズムをマスターする (Mastering Algorithms with Perl)」 (「参考文献」を参照) は、Perl を使用して複雑なデータ構造をインプリメントしようとするすべての人にとって必要な本です。しかし、「プログラミング Perl (Programming Perl)」は、例示が多く含まれている優れた入門書です。また本書は、不可欠な Data::Dumper モジュール (ここでは、データの保管と復元を行うために使用) についても触れています。
フォーマット
フォーマットの章では、今日あまり使用されていない Perl のフィーチャーについて説明しています。この章は、FORTRAN の出力フォーマット設定キーワード、BASIC の出力レイアウト、および nroff のイデオロギーを組み合わせたものです。これらの 3 つを使用してみれば、フォーマットが便利で有用であるということが分かります。この章には特に目新しいトピックはありません。この章は、以前のセクションが章になったものです。6 ページからなっているこの章は、果たして章にするだけの理由を見出すのは困難です。
パッケージ、モジュール、オブジェクト、過負荷、および結合変数
「プログラミング Perl (Programming Perl)」の第 2 版では、オブジェクト指向プログラミングは強調されませんでした。オブジェクトに関するセクションは小さく、Perl の集中的な OO 方法論の説明にはあまり役立ちませんでした。これが第 3 版では変わりました。オブジェクトに関する章が長くなり、Perl の OO についての説明がより詳細になりました。しかし全体的に見た場合、本書ではその点がまだ多少軽視されています。ユニバーサル・クラスの isa() および can() メソッド Class::Struct などのフィーチャーや、lvalue クラス・メソッドについては、分かりやすく説明されています。
パッケージやモジュールは、すべての Perl プログラマーにとって重要です。これらのフィーチャーに関するいくつかの新しい章が、第 2 版のときよりも多少長くなって含まれていますが、それぞれの章は数ページしかなく、これらはおそらく 1 つの章にまとめた方がよかったでしょう。これらの章は、Perl コードの再使用を考えている人 (および、すべての人というべきでしょう) にとって必読の章ですが、新規フィーチャーについての新しい例や更新部分を除けば、第 2 版と比べてあまり変わっていません。たとえば、必須モジュール・バージョンは説明されています (「モジュール・バージョンの使用」)。
オペレーターの過負荷に関する章は、詳しく有用です。さらに、この章はまったく新規に設けられたものです。なぜならば、第 2 版では、Perl のオペレーターを過負荷にすることはありませんでしたから。これは大きな言語の変更であり、この章ではそれを詳しく説明しています。多くの例が示され、簡単なもの (加算/減算の過負荷) から複雑なもの (数値定数の過負荷やランタイム過負荷) までを網羅しています。
結合変数に関する章では、この有用な技法の基本事項を説明し、ファイル・ハンドルを結合するためのメソッドと CPAN の Tie モジュール・リストが更新されています。標準スカラー、配列、およびハッシュ結合メソッドに関する多くの例や詳しい説明も含まれています。
Unicode
Unicode のサポートは困難であり、このトピックに関する章ではその理由を説明しています。UTF-8 エンコードは、Perl が最もよくインプリメントするエンコードです。このほかにもUnicode コンソーシアムによって定義されたエンコードがありますが (たとえば、UTF-16 や UTF-32)、UTF-8 は、国際文字セットにとって最適のサポート・エンコードです。この章の末尾の Unicode リソース、中でも、Perl、Unicode 、および I18N FAQ の項では、どれが 5.6.0 リリースの Perl に組み入れられ、どれが組み入れられていないかを、詳しく説明しています。本書は、文字マッピングとしての Unicode と UTF-8 エンコードとしての Unicod を明確に区別していません。
UTF-8 エンコードで書かれた Perl プログラムの簡明な例が示されていますので、変数名に非 ASCII 文字を使用することができます。Perl が Perl コミュニティーの言語を話せるほどの柔軟さを持つようになると、コミュニティーにもっと多くの人を容易に引き込むことができるはずです。
5.6.0 の Perl における Unicode サポートは、正しい方向への一歩です。しかし、それは完全ではありませんので、注意が必要です。CPAN Unicode モジュールには、5.6.0 の Perl だけでなく、古いバージョンの Perl ででも正しく動作するものがあります。適宜、これらのモジュールを使用する必要があります。余談ですが、UTF-8 エンコードをサポートするために xterm や mutt のような簡単なアプリケーションを Linux で入手するのが、非常に困難な場合があります。UTF-8 は、かなり新しい規格であり、それをソフトウェア化するためのサポートはやっと始まったばかりです。現在のところ Perl は、Unicode サポートでは Java に負けていますが、Java が始めから Unicode をサポートするように設計されていたことを考えれば、これも驚くには値しません。
IPC およびスレッド
IPC (プロセス間通信) に関する章は、第 2 版の IPC セクションを拡張したものです。新しい例や改良された例が示されており、IO::Socket::INET のようなモジュールが、ネットワーク・サーバーの作成というつらい仕事をこれほど単純化できるとは、実に驚くべきことです。また、新規の v-strings を使用して CR/LF を送信する簡明な例も示されています。
スレッドは結局、Perl 5.6.0 では、安定した (種類の) フィーチャーに結実し、スレッドに関する章は、スレッドに初めて取り組むプログラマーにとって有用な資料になっています。この章では、アルゴリズム・アプローチとしてのスレッド化についての概要説明、好き嫌いがはっきり分かれる UNIX の fork をもとにしたスレッド・モデルを使用する理由、ロック関数やサブルーチン属性の使用例を始めとする、いくつかのすばらしい例などが記載されています。残念ながら、スレッドを明示的にサポートするには、引き続きユーザーの Perl を構築しなければなりません。それは、スレッド化された Perl インタープリターが、普通のスレッド化されていないインタープリターよりも実行が遅くなることが "間違いない" からです。
CLI およびデバッグ
CLI (コマンド行インターフェース) の章は必読の章です。-p スイッチを使用するか、あるいは PERL5LIB 変数を使用するかに関係なく、この章のすべての情報が、将来のいずれかの時点で時間を節約してくれることは間違いありません。それを徹底的に学んでください。この章は、第 2 版の関連セクションを更新したもので、その主だったところでは、Perl インタープリターに影響を与える環境変数に関する説明をより詳しくしたことが挙げられます。この点について第 2 版では、まったく触れられていませんでした。
デバッグの章について最も悲しむべきことは、説明を怠っていることです。組み込み Perl デバッガーは、その能力と正確性にもかかわらず、CPAN から提供されている ptkdb デバッガーにはとても太刀打ちできません。CPAN の ptkdb を調べてみれば、最低に見積もっても、それが非常に優れたツールであることが分かるでしょう。ptkdb はすべてのプラットフォームで実行されるわけではありませんから (たとえば、そのためには Tk モジュールが必要です)、省くことができたかもわかりませんが、この強力で有用なツールについては、簡単な説明があったほうがよかったでしょう。組み込みデバッガーが気に入っている場合、あるいは、ptkdb が自分のプラットフォームで稼動しないため、組み込みデバッガーを使用しなければならない場合は、この章は疑いなく役に立ちます。第 2 版から取り入れたさらに 10 ページが追加されていて、技術情報と例示が豊富に盛り込まれています。Emacs との相互操作性についても触れていますが、セットアップと使用についての具体的な説明はありません。すべての NBC 訴訟が解決しないうちは、Profiler のセクションは最後に置かれます。Larry Wall がいつもテレビを監視しているのを知っている人がいますか?
コンパイルおよび内部機能
コンパイルに関する章は、Perl の内部機能の説明だけになっています。この章は、技術的なものに興味のある人にとっては魅力あるものであり、BEGIN/END/CHECK/INIT サブルーチンの機能やモジュールの使用法を理解するのに役立ちます。
内部機能の章は、多分コンパイルの章と一緒にすべきだったでしょう。この章は、ユーザー・プログラムへの Perl の組み込みや C コードによる Perl の拡張などの、難解な (ほとんどの Perl ユーザーにとって) サブジェクトへの優れた導入部です。残念ながらこの章はあまりにも簡単過ぎますが、全般的な初級者から中級者向けの本としては、それも当然かもしれません。
Perl 文化
第 3 版で最も感心するのは、「洗練された Perl (Perl as Culture)」の章です。これらの章では、言語を超えたもの、すなわちコミュニティーとしての Perl にかかわるすべての事柄を上手に紹介しています。これらの章は、第 2 版のいくつかのセクションを大きく拡張したものであり、魅力的な読み物になっています。
CPAN の章は、Perl 開発に興味を持っているすべての人にとっての開始点です。CPAN は Perl モジュールにとって最良のリソースであり、それに充てている章は大いに褒められるべきです。
セキュリティーの章も、第 2 版から大幅に拡張されています。この章は実際的なアドバイスであり、多くの有用な例が含まれています。元の 4 ページが約 25 ページになっており、1 行たりとも見過ごしてはなりません。CGI プログラムのセキュリティーに特有の情報が記載されています (CGI モジュールを含む)。
ポータブル Perl、POD (Plain Old Documentation)、Perl 文化などの共通の手順に関する章は、よく書かれ、更新されており、また非常に優れた例が記載されています。これらの章は、積極的にしろ消極的にしろ、Perl コミュニティーに参加することに興味のあるすべての人が読む必要があります。"黒い Perl" などのような宝石から学ぶものが数多くあります。
特殊な名前、関数、pragma、および標準モジュール
特殊な名前、関数、pragma、および標準モジュールに関する章は、完璧で、図もよくできています。特に新規機能についての更新は大歓迎であり、これらの例が Perl 5.6.0 を生き返らせています。技術参照セクションが本書の末尾に設けられているのがよく、第 2 版では、これが他のがらくたに関する章の前に入れられていました (第 3 版では、「洗練された Perl (Perl as Culture)」という見出しで、いくつかの章に分けられています)。
Unicode に関する関数ごとの準拠やモジュールごとの準拠に興味のある人にとっては、モジュールや関数の Unicode 準拠についての簡単な説明があったほうがよかったかもしれません。しかし、Unicode の章では、"use utf8" pragma を使用することにより、Perl のすべてのことを魔法のように Unicode 準拠にすることができると、希望が述べられています。
結論
全般的に見て、この非常に人気のある本の第 3 版は、Perl の歴史における一大イベントです。バージョン 5.6.0 のリリースは、多くのソフトウェア改善を Perl コミュニティーにもたらしましたが、同時に、第 2 版を大幅に時代遅れにもしました。このギャップは、第 3 版によって埋められています。しかし本書は、単なる改訂版ではありません。いくつかのセクションがまったく新規に設けられ、他のいくつかのセクションは、第 2 版のときの分量の 2 倍になっています。新規のモジュール、pragma、関数、機能などが、すばらしい例で生き生きと示されています。このような理由からだけでなく、特にProgramming Perlの第 3 版が、現在では、Perl 言語の決定的かつ最良の参考書となっていることからも、Perl プログラマーは本書を購入すべきです。
参考文献
著者について  | 
|  | Teodor Zlatanov 氏は、1999 年にボストン大学を卒業し、コンピューター・エンジニアリングの分野で理学修士号を取得しました。1992 年以来、Perl、Java、C、および C++ を使用して、プログラマーとして働いています。興味の対象は、オープン・ソースのテキスト分析処理、3 層クライアント・サーバー・データベース・アーキテクチャー、UNIX システム管理、CORBA、およびプロジェクト管理です。メール・アドレスは
tzz@bu.edu です。 |
記事の評価
|