狐の王国


2006年05月23日(火) [過去の今日]

#1 魔法に見えるうちは追い付いてない証拠

よくJcode.pmやEncode.pmを参考にさせてもらってperlでプログラムを書くことがあるのだが、やはり圧倒的にレベルが高い人のソースは魔法のようだ。俺自身のレベルが低いせいもあろうが、あまりに魔法のようで思考がストップしてしまうことがある。

今日も今日とてEncode.pmのfind_encodings()付近で思考が止まった。Encode.pmの頭に%Encodingというハッシュがあるのだが、各エンコードのサブモジュールはここに名前を登録する。Encode::JP::JIS7では、

for my $name ( '7bit-jis', 'iso-2022-jp', 'iso-2022-jp-1' ) {
    my $h2z     = ( $name eq '7bit-jis' )    ? 0 : 1;
    my $jis0212 = ( $name eq 'iso-2022-jp' ) ? 0 : 1;

    $Encode::Encoding{$name} = bless {
        Name    => $name,
        h2z     => $h2z,
        jis0212 => $jis0212,
    } => __PACKAGE__;
}

というようにして登録されている。こうすることで$Encode::Encoding{$name}の中身はEncode::JP::JIS7のオブジェクトになり、当該ネームスペースのメソッドが呼び出せるようだ。

わかってみれば当り前のようにすら思えて来るが、これがなかなか思い付かなかった。実際、他のモジュールでは、substrでスクリプトの文字列を切り出して、evalで実行なんて手段でサブモジュールを動かしてた。それに比べてこの実装の美しいこと、美しいこと。

やはりレベルが高い人のソースを読むのは勉強になる。いろんな意味で、ためいきの出る瞬間でもあるが……。

newしてるのと同じ?:

しかし、これって各サブモジュールごとにnewしてんのと同じだよね? サブモジュールが増えると遅くなったりしないかなあ。

(@260)

この記事のURI

最近の記事

以上、1 日分

タイトル一覧


カテゴリ分類
Powered by hns-2.19.8, HyperNikkiSystem Project

過去にこの日記が置いてあったcgi.misao.gr.jpは廃止されました。それによって記事へのURIが変わってしまっています。cgi.misao.gr.jpをwww.misao.gr.jpと置き換えるだけで同じ記事にアクセスできるはずです。

Sugano "狐志庵" Yoshihisa(E) @ 美紗緒ネットワーク <koshian@misao.gr.jp>
日記管理ページ