PERL HACKSそしてPerl Package
2007.04.01 Sunday 11:20
先週O'REILLYの「PERL HACKS」を買ってざっと読んだ感想.
(昔からわかっていたが)CPANの無いPerlは...なんですかね...肉の入っていないすき焼きとかそんな感じ?
PERLすごすぎ.実はRubyなんか目じゃないかも.でもすごすぎて他の人に渡せないプログラムになってしまう危険性も秘めている.
かつてModern C++ Design(ピアソンエデュケーション)を読んだとき(これはC++を使っている人には一度は読んで欲しい本)C++の世界がぐっと広がったように感じたのと同様,この本でPerlに対する認識がかなり変わった.
(昔からわかっていたが)CPANの無いPerlは...なんですかね...肉の入っていないすき焼きとかそんな感じ?
PERLすごすぎ.実はRubyなんか目じゃないかも.でもすごすぎて他の人に渡せないプログラムになってしまう危険性も秘めている.
かつてModern C++ Design(ピアソンエデュケーション)を読んだとき(これはC++を使っている人には一度は読んで欲しい本)C++の世界がぐっと広がったように感じたのと同様,この本でPerlに対する認識がかなり変わった.
Perlは低レベルな部分をユーザに開放しているのである意味何でもできる.例えばパッケージ中でuseとすればRubyでいうところのmix-inとなるし,既存の(システム関数でも)関数を再定義することで無理矢理オーバライドすることもできる.
この本を読んで初めて知った機能としてCのマクロのようにソースコード自身を事前に(Perlモジュールで)処理できる拡張がある.Smart::Commentsのようにはデバッグコメントを実行文に置き換えたり,Filter::Simpleで「PerlのXXXな部分が嫌いだ」に対して自分で文法を拡張したりできる.文法を改変するプログラムは下手をすると他人が読めない物になる危険性があるが,例えば全ての関数の先頭にトレースを入れるようなデバッグ用途では威力を発揮するように思う.
その他HASHの変更を制限したり,グローバル変数を見つけたりとPerlの欠点を補う方法が色々載っている.
話は変わってCPAN.驚くべき様々な技はCPANのパッケージとして用意されているので,パッケージを取得しないと使えない物が多い.例えばデータのダンプに使うYAMLはコアパッケージには入っていない.
CPANはWindowsだとうまく動かないと思っていたのだが,Visual C++ 6.0がインストールされている環境ではC++を含むケースでも問題なくビルドできるようだ.インストール中にcpでファイルコピーを行う部分があるのでcpコマンドが必要かと思っていたのだが,ここはExtUtil::Commandに含まれるコードを使って環境依存性を減らすようになっている.またWindowsではmakefile.PLの処理でnmakeが必要になるのだけど,nmakeが見つからないと自動的にmicrosoftのサイトから取得してインストールするのにはちょっとびっくりした.
作ったCPANパッケージをVC++の入っていない人に渡すためにはパッケージにすればよい.単にblibディレクトリをtar.gzに圧縮して
でPPDを作ってファイル名だけ編集.ファイル名部分には実際の配置に併せてPPDからの相対パスを記入する必要がある.
(ここまではActivePerlのマニュアルに書いてある)
公開用のPPMライブラリを作るには,PPDパッケージとファイル名を置くだけでも良いのだけど,ppmがPPDの情報を逐一取得しようとするので数が多いとものすごく時間がかかる.package.xmlというファイルにppdの情報をまとめることでクライアントから一回で全情報を取れるようになる.
その中身は
というもの.
あとはクライアントで
あらかじめ決めたパッケージ群を一度にインストールするにはBundle::*というパッケージバンドルを作成してそれをインストールさせればできるらしいが,自分はまだ試していない.
CPANにあるメジャーなものはActiveStateのPPMリポジトリ(ActivePerlの初期設定済み)にあるの普通はこんな面倒なことをする必要はない.だが,プログラムと一緒に必要な物だけ渡したい時やインターネットにつながっていないPCにインストールしたいときにはこういうことが必要になる.
この本を読んで初めて知った機能としてCのマクロのようにソースコード自身を事前に(Perlモジュールで)処理できる拡張がある.Smart::Commentsのようにはデバッグコメントを実行文に置き換えたり,Filter::Simpleで「PerlのXXXな部分が嫌いだ」に対して自分で文法を拡張したりできる.文法を改変するプログラムは下手をすると他人が読めない物になる危険性があるが,例えば全ての関数の先頭にトレースを入れるようなデバッグ用途では威力を発揮するように思う.
その他HASHの変更を制限したり,グローバル変数を見つけたりとPerlの欠点を補う方法が色々載っている.
話は変わってCPAN.驚くべき様々な技はCPANのパッケージとして用意されているので,パッケージを取得しないと使えない物が多い.例えばデータのダンプに使うYAMLはコアパッケージには入っていない.
CPANはWindowsだとうまく動かないと思っていたのだが,Visual C++ 6.0がインストールされている環境ではC++を含むケースでも問題なくビルドできるようだ.インストール中にcpでファイルコピーを行う部分があるのでcpコマンドが必要かと思っていたのだが,ここはExtUtil::Commandに含まれるコードを使って環境依存性を減らすようになっている.またWindowsではmakefile.PLの処理でnmakeが必要になるのだけど,nmakeが見つからないと自動的にmicrosoftのサイトから取得してインストールするのにはちょっとびっくりした.
作ったCPANパッケージをVC++の入っていない人に渡すためにはパッケージにすればよい.単にblibディレクトリをtar.gzに圧縮して
make ppd
でPPDを作ってファイル名だけ編集.ファイル名部分には実際の配置に併せてPPDからの相対パスを記入する必要がある.
(ここまではActivePerlのマニュアルに書いてある)
公開用のPPMライブラリを作るには,PPDパッケージとファイル名を置くだけでも良いのだけど,ppmがPPDの情報を逐一取得しようとするので数が多いとものすごく時間がかかる.package.xmlというファイルにppdの情報をまとめることでクライアントから一回で全情報を取れるようになる.
その中身は
<REPOSITORY>
全てのPPDファイルをくっつけたもの
</REPOSITORY>
というもの.
あとはクライアントで
ppm repo add リポジトリのパスとすればインストールが可能となる.
あらかじめ決めたパッケージ群を一度にインストールするにはBundle::*というパッケージバンドルを作成してそれをインストールさせればできるらしいが,自分はまだ試していない.
CPANにあるメジャーなものはActiveStateのPPMリポジトリ(ActivePerlの初期設定済み)にあるの普通はこんな面倒なことをする必要はない.だが,プログラムと一緒に必要な物だけ渡したい時やインターネットにつながっていないPCにインストールしたいときにはこういうことが必要になる.
Comments