#amazon(483991415X,,image)
実践実用Perl―テキスト処理の基礎から情報ポータル構築まで
- 作者:藤岡 和夫
- 評者:極悪
- 日付: 2004-11-12
お薦め対象
Perl 入門書の次に
感想
あの藤岡さんの本。自分の日記に書いたまんまなので以下の
感想は唐突で読みづらいですが、お許しを。
p90:split 関数の最大分割数指定の必要性の説明が読み返さない
と意味がわからなかった。5番目のフィールドのみ誤って複数フ
ィールドに分解されるという前提はちょっとご都合主義的だと思
う。最後が , で終わっている場合と、データが , を含んでいる
場合の二つを一緒に説明してしまっている。ここは
$_ = "1,2,3,";
print join("/",split(/,/,$_,-1)),"\n";
print join("/",split(/,/,$_ )),"\n";
$_ = "1,2,3,4,5a,5b,5c,6,7";
@tmp = split(/,/,$_);
print $_,"\n",join(" ",
@tmp[0..3],
join(",",@tmp[4..$#tmp-2]),
@tmp[$#tmp-1..$#tmp] # @tmp[-2..-1]
),"\n";
みたいに二つの問題として扱えばわかりやすい。スクリプトの処
理の流れを図で丁寧に説明しているくらいなので、図つきで説明
したほうがよかっただろう。
前半の perl リファレンス部分を読めば、この本が perl 入門で
はなく入門書の次に読むべき本だということはわかるので、この
辺の説明がわかっている人は楽しめるが、わからない人が悩まな
いかと心配な気もする。同じことは push/pop/shift/unshift の
説明にも言える。どうせ説明するなら図を書いて説明して欲しか
ったところだ・・・僕は図がなくてもわかるけど(笑)。ちょっと
文章に頼りすぎかな。もっと図や表を併用して説明して欲しい。
ところで p282 の実態参照のエンコードのところは、< > & ' "
の順に処理してるけど、& < > ' " の順でないとダメだよね。<
が & amp;lt; になってしまうはず。%xx のエンコードも含めて、
この辺は CGI モジュールで済ませたほうが良いと思ったが、
jperl だと何か不都合があるんだったけかなぁ?
範囲演算子がスカラーコンテキストでは行番号と比較される、と
いうのは TSnet でも出た覚えがあるが、知名度が低くおもしろい
話題だと思った。僕も使ってみよう。
dbm で格納できる1データの最大が 1KB というのは YukiWiki で
も話題になった。p133 で大きなデータを取り扱う方法について言
及があるが、気にし始めると夜も眠れないところだと思うのでも
っと丁寧に説明したほうが良い。後で例が出るということになっ
ているが、スクリプトの中に埋もれていて説明が見つからない。
これがその回答だ、と明示すると良かった。
後半では HTML の話とスクリプトがじゃんじゃん出てくるが、こ
れは見づらい。早々に Template モジュールを導入してシンプル
に見せるべき。せっかく HTML を手入力せずに日記等を書こうと
しているのに、その途上のスクリプトの中身が HTML 入力だらけ
になってしまっては辛い。
同じく後半がセリフつきのプロポーショナルフォントのスクリプ
トと、その説明ばかりが目立つのも残念で、著者の経験がもっと
書かていても良かった。例えば p188 にさらりと書いてあるが
、カテゴリは少なめが良いというのは「そうだよね」と共感を誘
う。perl と関係ないが、ポイントだろう。
最後の統合ぽーたるの構築は perl 命、CGI 大好き、な人にはい
いが、少し懲りすぎかな。統合しなくても小さなツールとして独
立させるほうが僕の好み。すでにあるアイデアプロセッサとか
PIM ソフト、あるいは Explorer を基地にするほうが簡単だ。
クリップメモのスクリプトも、どうにかして URL とタイトルを
自動で取得できないとイマイチなんじゃないかな。
しかし全体としては藤岡さんの個性や技術力、経験が現れていて
読み応えのある内容。コラムにある「タイムマシーン・コンピュ
ーティング」のデスクトップの話など、藤岡さんならではだろう。
かといって過剰に知識を押し付けるわけでもない。説明よりも
知識が先行していて舌足らずな部分があったと思うが、入門書の
次なら楽に読めてそれでいて楽しめる内容だった。
perl と Unicode ではなく jperl と shift-jis と割り切った
のも意外と悪くない。jperl が息を吹き返しそう。でも文献整理
での文字の扱いや最新の便利なモジュール、将来のことを考える
と perl + Unicode でないといつか行き詰まるかな。続巻のネタ
だろう。
僕は wiki で日記を書き捨てにしてるけど、この本を読んでサー
バ上の wiki にこだわりすぎたかなという気もしている。p306
「インターネットとローカルのデータの両方を同時に扱うことが
できる」という一文が新鮮に思えた。
サポート
Awakening CGI Module Project 「実践実用Perl」サポートページ
- はえー(^^; 私はまだ重さと厚さを実感している段階です。ただほんとにあのスクリプトの部分のフォントが惜しいですね。等幅にしてくれないと。 -- ねこ丸
- 早速、詳細なご評価ありがとうございました。
- split関数の最大分割数の話は私が遭遇した実例なんです。事実は小説よりも奇なり。最初書いたスクリプトでは、最大分割数を指定していなかったので、うまく動かなかったんですね。でも確かにわかりにくい(^^;)
- 一章が理解できるレベルであれば、実践的リファレンスはスクリプトを書くためにはそれほど重要ではないかもしれないですね。いろいろと普通のPerl本には書いていない情報も盛り込んであるので、多少は参考になると思います。リファレンス・デリファレンスやオブジェクト指向については、スクリプトを理解する上では、モジュールでほんの少し使うぐらいですから、まあこんなこともあるぐらいの理解で十分です。
- 実体参照エンコード部分のルーチンはミスっていますね。デコードは必要な場合、2回やっているので、問題なく表示できるのだけど、その必要が出てきたのはこのミスが原因かも(^^;)
- 大きなデータの取り扱いは十分に説明できなかったですね。メモファイルの管理の仕方がそうなっているぐらいで。次は本格的なデータベースを導入するしかないので、そのままにしてしまった。DBMのレコードに記録できるサイズの話は昔、ZazelさんにPerlのコードを見てもらって教えてもらったことがありました。その頃はjperlも4.036でしたから、今回、スクリプトを書いて確認したわけです。二重にDBMを使ってより大きなテキストデータを管理する方法は、JPDBという私が昔書いたテキストデータベーススクリプトにあります。それを整理して持ち出す余裕が今回はなかったので、中途半端な書き方になってしまった(^^;)
- Templateモジュールはまだ使ったことがない(^^;)
- スクリプトとその説明になってしまったということについては、スクリプトの本に何を書くべきか、どう書けばおもしろいか、どう説明するかという方法論が初めてのこともあって不十分でしたね。
- プロポーショナルフォントに関しては、等幅フォントは本の制作システム上使えないということで妥協せざるを得なかったんです。プロポーショナルフォントでもできるだけスクリプトを読みやすいフォントを選定したということです。レイアウト用の日本語ポストスクリプトフォントには等幅フォントがないんですね。
- 「統合ポータル」はプロモーション用の表現で、ここで私が工夫したことは、取得した情報にメモを付けることができるようになるということなんです。それとスクリプトをCGIにしてHTMLにリストしておくと、あのスクリプトはどこにいったかなとか、このスクリプトは何に使うものだろうと悩まなくてもよいということですね。何を入力すべきかもフォームに指定しておける。
- クリップメモの改良版を期待しております(^^)私も欲しい。
- Perl5.8をUnicodeベースで使うというのはスマートな解ですけど、WindowsのシステムがShiftJISであるうちは少し無理がある。パフォーマンスが劇的に向上するなら思い切ってと思いますが、そのメリットはほとんどないですから、Perl 6からでいいじゃないと思っています。モジュールで困ればその部分だけ、Perl 5.8に移行するという手もある。今のところ、モジュールはできるだけ避けているということもあるけど、困っていないですね。DBIとかODBCとかデータベース関係もPerl 5で使えるみたい。私がPerl5.8を使うとすれば、Linux環境でということになりそうです。
- 最後の「インターネット上とローカルのデータを同時に取り扱える」ということに着目していただいたのはうれしいです。これがもっとも言いたかったことです。そして、CGIはPerlだけのものじゃなくて、RubyでもPythonでもTck/Tkでも使えるわけで、スクリプト言語を混在させて使うことができるということも言いたいところです。実はもう一章あったのだけど、量が多すぎるということで削る決断をしてしまった。何もかも詰め込むわけにもいかないんですね。今なら本の書き方も多少わかっているのでもう少し工夫できるのですが。最後のほうは力尽きてしまっていましたので・・・ -- 藤岡和夫
- Template は HTML::Template か Template::Toolkit が有名ですね。Template::Toolkit は有名ですができることが多すぎてテンプレートとしてどうなんだ?という疑問を個人的には感じます。HTML::Template の方が簡単だしいいのではないかと。Unicode はプロンプトと相性が悪いですし、少し難しいですよね。Longhorn でプロンプトが他言語対応になると面白いんでしょうけど。 -- ねこ丸
- クリップメモでタイトルを自動取得:
use strict;
use Win32::GuiTest qw(FindWindowLike GetWindowText);
my $IE = "Microsoft Internet Explorer";
my @target_win = FindWindowLike(0," - $IE") or exit;
GetWindowText($target_win[0]) =~ m/ - $IE$/o;
print $`,"\n";
でも、これも含めて同じことができるフリーソフトがありそう。-- 極悪
- URL は FindWindowLike でウィンドウを切り替えて ALT+D, CTRL+C を SendKeys するとコピーできたけど、フォーカスが切り替わるのでカッコ悪いです。やっぱ既存のソフトを探すのがスマートか。 -- 極悪
- 早速、ありがとうございます。教えていただいた方法の応用ができるかどうか検討してみます。既存のソフトとの連携も視野に入れて柔軟に考えたいと思います。要は便利な方法を選べばよいわけですから。 -- 藤岡和夫
- これが良さそうです。選択テキストとタイトルとURLをクリップボードにコピーできるらしい。http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005950.html http://a-h.parfe.jp/zakucopy/zakucopy.html -- 極悪
- 便利なソフトですね。私が欲しいと思っていたものです。Rakucopyの取得したクリップボード文字列をmemol_edit.cgiに渡すように改造しました。もうしばらく練って発表したいと思います。ありがとうございました。 -- 藤岡
- よければブックレビューとは別にやりませんか? 情報が入りすぎててもったいないページになりつつあると思うんですが。 -- ねこ丸
- 編集等お任せします。サポートページからリンクを張ります。 -- 藤岡和夫
- 実践実用PerlをHackするへ