Mark Jason Dominus 氏の「Higher-Order Perl: Transforming Programs with Programs」(略して HOP) と Randal Schwartz 氏の「Randal Schwartz's Perls of Wisdom」(略して RSPW) にはいくつかの共通点があります。まず、Perl に関する本であること (これは言うまでもありませんね)、著者が Perl コミュニティーでよく知られた存在であること、そして何より、どちらも特定のソフトウェア・パッケージについて解説するのではなく、さまざまな興味深いテクニックを数多く集めているという点です。
ただし、大きな相違点もあります。RSPW の方は、この著者自身が書いたということ以外はほとんど共通点のない多彩なトピックが、順序に関係なく読めるように編集されています。いずれも興味深いトピック揃いですが、ある特定の目的に沿って書かれたものではなく、ほかの Perl 本で類似の例を挙げるとすれば「Perl クックブック (原書名: Perl Cookbook)」のスタイルに近い本です。一方、HOP は間違いなく典型的な Perl 本の 1 冊に数えられるテキストです。まず難易度が中程度のテクニックから始めて徐々に難易度を上げてゆく構成で、その複雑さと得るものの大きさと言ったら、私が今までに脳ミソが溶け出しそうな思いを味わった本の中でもトップ・クラスかもしれません。
この記事で取り上げるすべての書籍については、参考文献セクションのリンクを参照してください。
Mark Jason Dominus は、Perl コミュニティーの著名人であり、そうあって然るべき人物です。HOP には、彼の高度なスキルと素晴らしいテクニックが数多く紹介されています。
第 1 章では、再帰やコールバックなどの単純なトピックが、いずれも適確なサンプル・コードとともに説明されます。必要に応じ、この章の本筋から逸れる再入不可関数などのトピックについても妥当な範囲で取り上げられています。第2章はディスパッチ・テーブルに関する解説です。さまざまな構成サンプルは秀逸ですが、処理の大半を自動化する AppConfig などのモジュールの説明が含まれていないのが難点です (収録されているサンプルでは、AppConfig には不可能な処理を実行できますが、そのような高度な関数は一般的なプログラムには必要ないためです)。
第 3 章は、関数の結果をキャッシュするメモ化のテクニックに関する解説です(メモリーを使用し関数の実行結果を保存します)。この章は、メモ化の実装に関する解説、サンプル・コード、メリットとデメリット、起こりやすい問題など、必要なすべての基本情報が網羅された内容になっています。ただし、レキシカル・クロージャーのセクション (3.5.2) になると、ビギナー・レベルのプログラマーの大半はいったん本を置いてしばらく休憩しないと、このトピックに取り組むのは難しいようです。この本は「初めての Perl (原書名: Learning Perl)」とは対象読者が異なるので、これ以降を読破するには少なくとも数年のプログラミング経験が必要です。セクション 3.10 では「Orcish Maneuver」が分かりやすく説明され、「Semipredicate」問題も解説されています (私は HOP を読む前にこの問題を認識していましたが、このような名称で呼ばれているとは知りませんでした。この問題を取り上げてくれていてよかったと思います)。
ここまでの全般的な雰囲気をたとえるなら、たまたま Perl のエキスパートでもあるコンピューター・サイエンスの教授が、学生と一対一でゆっくり会話をしているといったところでしょうか。この点は、プログラマーがプログラマーのために書いている多くの Perl 本とは異なります。HOP はより書物に近い読みごたえの本であって、さまざまなテクニックの抜粋で組み立てたハウツー本との共通点はあまりありません。これは私にとってはおあつらえ向きでしたが、あまり忍耐強くない読者には不向きかもしれません。第 3 章は、いわばターニング・ポイントです。この章の内容に興味を持ってすべてを理解することができない場合、次章以降を読むのは難しいでしょう。
第 4 章は、この後の内容の基礎となるイテレーター・フレームワークの構築から始まります。ここでは、この素晴らしいフレームワークに興味を持つプログラマーにとっての要となる事項が解説されます。各サンプル・コードは、単純なものから「Dominus 氏はタダ者じゃない」と舌を巻く高度なものへと進みます。イテレーターのフィルターおよび変換は直前のサンプルを基にして作成され、実作業ですぐに役立つコード・パターンが示されます。
第 5 章では、パーティションに関する問題と、再帰関数から繰り返し関数への変換方法 (これは楽しめること間違いなし) に取り組みます。また、さらに高度な階乗級数とフィボナッチ数列の処理系についても解説されます。第 6 章のトピックは無限ストリームです。これは延々と続くので私は完了できませんでした (というのはもちろん冗談)。セクション 6.5 では正規表現によるストリング生成が解説されています。「ある正規表現を使って、指定した条件に一致するストリングをすべて検出するにはどうすればいいのでしょうか?」というのはよくある質問の 1 つですが、そのようなことは多くの場合はもちろん不可能です。ただし、検索結果として限られた数の一致ストリングが出力されることもあれば、無限ストリームが出力されることもあります。無限ストリームの場合、必要なのは最初の部分だけです。
第 8 章は HOP の核心となる章で、ほかの関数に基づいて動作する関数 (高階 (Higher-Order) 関数。おそらく本書のタイトルの由来でしょう) の実装方法が解説されています。この章の各セクションとサンプル・コードを理解することは、後続の内容に進む上で不可欠です。HOP フレームワークを介した字句解析と構文解析の手法が紹介され、展開されるあたりで、頭が湯気を立て始めるはず。休憩して疲れを癒してから戻ってきてください。第 9 章でも巧妙で複雑なサンプル・コードが続々と紹介され、宣言型の描画システムの実装方法が示されます。
今日まで長年にわたってプログラミング経験を積んできましたが、あらゆる面でこれほど私のスキルを高めてくれた本は、ほかには数えるほどしかありません。すぐに思い浮かぶのは「UNIX パワーツール (原書名: Unix Power Tools)」、UNIX® プログラミングに関する Richard Stevens の複数の著作、そして Donald E. Knuth 著「The Art of Computer Programming (翻訳書・原書とも)」。これらの本はプログラミング言語の教授にとどまらず、その原理までも見事に解説してくれています。Mark Jason Dominus 氏と HOP に対する私の称賛と敬意が、この記事から伝わってくれることを願っています。HOP はこれから相当長い期間にわたって私の本棚に置かれ続けるに違いありません。
Randal Schwartz's Perls of Wisdom
RSPW は、楽しめる本の 1 つです。HOP が私たちを Perl というオートバイに乗せてコンピューター・サイエンスのさまざまな講堂を一巡りして (騒音も何もかも) すべてを体験させてくれるのに対して、RSPW は国内をバスで旅するような感覚です。RSPW のトピックは最新のものから廃れてしまったものまで多岐にわたっていますが、その主な理由は、それらのトピックが Perl の新しい CPAN モジュールや Perl 自体の開発に何らかのヒントを与えたものだということです。Randal 氏の解説は見事なもので、いずれのトピックも明瞭で簡潔です。ただし、「詳細は CPAN モジュール XYZ を参照」といった注意書きが足りない箇所がかなり目につきます。たとえば、第 4 章 (CGI Programming) のテンプレート作成方法では、示されているサンプル・コードよりもはるかに強力な Template Toolkit を紹介しなければ片手落ちです。
第 1 章は Perl の高度なチュートリアルの数々で構成されています。いずれも一読に値する内容ですが、「Introduction to Objects」チュートリアルは特に優れています。
第 2 章では、Perl の本領であるテキストの検索方法と編集方法が説明されています。やはりどのトピックも一見の価値があり、その大半は実際に役立つはずです。この章で扱われているのはビギナー・レベルから中級レベルの内容で、読みやすい流れになっています。
第 3 章から第 5 章では、主として Web 開発 (HTM と XML、CGI、Webmaster's Toolkit) が解説されています。これらは本書の根幹であり、Randal Schwartz 氏の最大の関心分野でもあります。あるトピックでも言及されているとおり、これらの内容は実際に起きた問題に対応して書かれており、その問題も示されます。サンプル・コードは時として大雑把だったり、逆に詳細すぎたりすることもありますが、どれも有益なものばかりです。解説はサンプル・コードの提示に向けて分かりやすく組み立てられ、サンプル・コード自体にも説明が付けられています。
RSPW は、HOP の対象読者とは異なる読者層、つまりビギナーから中級レベルの Perl プログラマーをターゲットにした本です。こうしたプログラマーの多くは、実用本位ですぐに利用できるコードを求めています。ところが、そのようなコードの代わりに使うことでプログラマーの作業を軽減できる既製の CPAN モジュールについては、本書に説明されていません。それが唯一の欠点ですが、そのほかはすべての面で素晴らしい本です。「Perl クックブック」および「プログラミング Perl (原書名:Programming Perl)」とともに心からお薦めします。
総合的に見て、HOP と RSPW はいずれも、読者のライブラリーに加えてほしい優れた本です。ただし、この 2 冊が同じ読者のライブラリーに並ぶことはないでしょう。
RSPW は、有益なアドバイスと詳細なコード解説が満載された、ビギナーにうってつけの良書です。読み物として大いに楽しめて (面白くない場合や難しいと感じるトピックは飛ばし読み可能)、実作業ですぐに役立ちます。
HOP は、コンピューター・サイエンスの分野で豊富な知識と経験を持つ上級レベルの Perl プログラマーをターゲットとした素晴らしい書籍です。大学でアルゴリズムを楽しく学んだ経験があり、Perl で苦もなくプログラムが書けるなら、おそらく HOP に夢中になるはずです。全体的な雰囲気、そして収録されている内容やコードが、HOP を強く印象づけています。深い知識と英知、直観力をもたらしてくれる本書は、すべての Perl プログラマーが余すところなく理解し、味わってみたいと望むに違いない本に仕上がっています。
学ぶために
- この記事で取り上げた下記の記事を読んでください。
- Higher-Order Perl: Transforming Programs with Programs(Mark Jason Dominus著、2005年3月Morgan Kaufmann刊)
- Randal Schwartz's Perls of Wisdom(Randal Schwartz著、2004年12月Apress刊)
- Perl Cookbook(Tom ChristiansenとNathan Torkingtonの共著、2003年8月O'Reilly刊)
- Unix Power Tools(Shelley PowersとJerry Peek、Tim O'Reilly、Mike Loukidesの共著、2002年10月O'Reilly刊)
- Richard Stevens著による様々な著書(出版社や出版日は様々です)
- The Art of Computer Programming シリーズ(Donald E. Knuth著、Addison-Wesley刊ですが出版日は様々です)
- Tedによるリビュー、「洗練されたPerl: Perlに関する重要な3冊の本」(developerWorks, 2004年5月)の中で紹介した、Perl 6 EssentialsとPerl CookbookそしてPerl Template Toolkitを読んでください。
- TedがdeveloperWorksの洗練されたPerl シリーズで書いている、Perlに関する記事を読んでください。
-
developerWorksのLinuxゾーンには、Linux開発者のための資料が他にも豊富に用意されています。
-
developerWorks technical events and Webcastsを利用して、最新技術を学んでください。s
製品や技術を入手するために
-
CPANは包括的なPerlアーカイブ・ネットワークであり、ここからPerlモジュールやスクリプト、ドキュメンテーション、その他様々な資料を入手することができます。
-
無料の2枚組DVDセット、SEK for Linuxをご注文ください。DB2®やLotus®、Rational®、Tivoli®、WebSphere® など、Linux用の最新IBMソフトウェア試用版が含まれています。
- 皆さんの次期Linux開発プロジェクトを、IBM trial softwareを使って構築してください。developerWorksから直接ダウンロードすることができます。
議論するために
-
developerWorksblogsからdeveloperWorksコミュニティーに加わってください。

Teodor Zlatanov 氏は、1999 年にボストン大学を卒業し、コンピューター・エンジニアリングの分野で理学修士号を取得しました。1992 年以来、Perl、Java、C、および C++ を使用して、プログラマーとして働いています。興味の対象は、オープン・ソースのテキスト分析処理、3 層クライアント・サーバー・データベース・アーキテクチャー、UNIX システム管理、CORBA、およびプロジェクト管理です。メール・アドレスは tzz@bu.edu です。