金曜日, 6月 03, 2005

perlIO

PerlIOを使ってみました。すごい便利。
と書いてみて、そうかな?って気がしてきました。どちらかというと、クールかも。

gzipで圧縮されたデータ($buff)があるときには、こんな感じで解凍できます。
--------------------------------------------------
open FH, '<:gzip', \$buff or die $!;
$content .= $_ while ;
close FH or die $!;
--------------------------------------------------
1行目では変数をファイルハンドルとして開いています。
2行目でファイルハンドルから読み出されるデータは解凍されています。
簡単に言うと、PerlIOを使うと入出力の際にフィルタを適用できるわけです。プログラムから見たファイルハンドルはフィルタをかぶった疑似ファイルハンドルなわけですから、奥にいるのが変数なんかでもいいわけですね。でも変態だったらちょっといやな感じです。いないか。

と、書いて気がついた。
だとすると、と<$fh>にはもう性能差はないのかも知れませんね。昔は"直接"と"間接"だったわけだけど、今は両方間接になったはずだし。

ざっと調べてみたところ、
1. 文字コードの変換系(Shift-JIS ←→ UTF-8や改行文字の変更、MIMEなど)
2. 暗号系(CBCやMD5など)
3. 圧縮系(gzipなど)
の分野のフィルタがあります。


本当は上の例みたいに使うつもりはなかったんですが、ソケットとgzipフィルタの相性が悪かったので変数を開き直すなんておかしなことをやってます。

ただ、使ってみて意外といい気がしました。
これはインターフェイスの統一ですね。
どれもデータを受け取って変換して出力するだけなのに、モジュールごとにメソッド名はきっと違うでしょう。これを覚える必要がないのがすばらしい。頭の容量少ないんですよね。


ちなみに最初に”使ってみた”とか書いてますが、意識して使ってみたというだけで、みんな知らないうちに使っているのだった。。。

0 件のコメント: