« レンタルサーバでデータベースを使いたい | メイン | 霊夢落書き »
2006年01月31日
すぐに使えるCPANモジュール [Perl]
CPANには便利なモジュールがたくさんあるけれど、コンパイルの伴うインストール作業が必要だったり、複雑な依存関係があったり、日本語のドキュメントが無かったりしてなかなか気軽に使うことが出来ない。
とりわけレンタルサーバ向けのCGIアプリケーションを組むとなると動作条件にかなり厳しい条件が課されるので、CPANモジュールを使うのはますます厳しい。XSインタフェースを使っているモジュールは軒並み全滅だ。安価なレンタルサーバでリモートからのモジュールインストールを許可しているところはほとんど無い。
そんなわけで、PurePerlでCGIディレクトリに置くだけで使える便利なモジュールをいつくか紹介してみようと思う。
LWP::Simple
外部のサーバのリソースをダウンロードするためのモジュール。URLを指定して、目的のリソースを表示したりファイルとして保存したりすることができる。
use LWP::Simple;
$data = get( 'http://totora.jpn.org/' );
たったこれだけの行で、www上のリソースを取得することが出来る。いちいちプログラマがリクエストヘッダを組み立てたりする必要は無いわけだ。これは非常に便利である。
さらに、getprint( $url ) メソッドを使えばそのまま標準出力に表示できるし、getstore( $url, $fileName ) メソッドならサーバ上にファイルとして保管することもできる。
たとえばリンクしようとしているバナー画像を自動的に取得して、自分のサーバにコピーするなんてことも簡単にできるわけだ。
これだけでは物足りないと感じたなら、LWP::UserAgent モジュールを使うといい。よりWebブラウザに近いレベルでのwwwアクセスが可能になる。
Image::Size
画像ファイルの高さと幅を求めるためのモジュール。画像形式は BMP、GIF、JPEG、PNG の他に、PSD や SWF などにも対応している。
use Image::Size;
my ($width, $height) = imgsize( './banner_image.png' );
アップロードした画像の大きさを、HTML の img タグで指定したいときなどに便利だ。前述の LWP::Simple などと組み合わせれば外部のリソースも測定できる。
CGI::Application
Web アプリケーションのための、シンプルなフレームワーク。CGI スクリプトを組むときにこのクラスを継承して作ると、より見通しの良いアプリケーションを作ることが出来るようになる。
このモジュール自体が触れているのは、フォーム入力の制御と、ラン・モードと呼ばれるページ遷移の管理だけで、モジュール自体がなにかをすると言うよりは、この枠組みの上で作った方が統一性が取れますよ。というものだ。Perlの優れたフレームワークと言えばCatalyst が有名だけれども、これはもっとシンプルで、比較的規模の小さいCGIアプリケーション向きと言える。
Webアプリケーションの雛形として捉えると、学ぶべき点はたくさんある。これに慣れたら、自分なりにカスタマイズしたフレームワークを組み立ててみるのも一つの手だろう。
CGI::Carp
エラーメッセージをブラウザ上に表示することができるようになるモジュール。標準モジュールに組み込まれているようだが、便利なのでこれも取り上げておく。
use CGI::Carp qw(fatalsToBrowser);
頭にこの1行を書いておくだけで、実行中にエラーが出ると、500メッセージの変わりに親切なエラーメッセージを表示してくれるようになる。設置するとき足りないモジュールを探すのに便利だ。
Data::Dumper
これも標準だが、便利なのでついでに。複雑なデータ構造の内部を全部展開して、ツリー状のテキストとして出力する。テキストは無名配列の式の形で出力されるので、そのままPerlに読み込ませれば元のデータに復元することが可能だ。シリアライズ形式のひとつとも言える。
デバッグのほか、他人の作ったモジュールの中身を覗くのに適している。一種のデータベースとして利用するのも考えてみたが、パフォーマンスやセキュリティ的にはどうなんだろうか。
Error
Perlで try~catch による構造化エラー処理を実装するためのモジュール。詳しくは1/19 の記事に纏めたので、そちらに譲ることにする。
投稿者 : 12:17 | コメント (0) | トラックバック (0)
トラックバック
このエントリーのトラックバックURL:
http://totora.jpn.org/mt/mt-tb.cgi/100