■2005-09-04
* [Perl][メモ] ModBlosxom
いつの間にかBlosxom関連Wiki all about blosxomなるものが。これは素晴らしい。 で、派生系としてModBlosxomがリンクされてました。そういえば、去年の今頃につくりかけを放置したままですね…… その後改良を続けて、どこぞのサイトで実際に運用されてるので、追々コードを書き直しておこうかしら。
紹介先では「プラグインに互換性がない」とありますが、一応compatモジュールを使えばblosxomプラグインがある程度使えたはず(その場合mod_perlで走らせてもありがたみないのですが)。
■2005-09-09
* [Perl][メモ] 楽々?アクセサ作成
Perl で楽々アクセサ作成について考えてみたで、可能な限り簡単に$obj->author->name
を実現しようとClass::Accessor::Linkedを書いてみました。author以下のデータにアクセスするために、ハッシュリファレンスをAUTOLOAD可能なオブジェクトにすることで矢印を連結しています。
というわけで効率は悪いし、最初にデータ構造を用意しておかないと深いところのデータが利用できないなど問題が多々があり、実用性はありません。あくまでも$obj->author->name
を実現してみたかったということで。
本当はちゃんとデータ構造を反映したaccessorを生成してあげないといけないのですが、お昼休みではそこまでできませんでした。
* [Perl][メモ] autobox::PropHash
Class::Accessor::Linkedは多少なりともお役に立ったようです(Perlで楽々アクセサ作成〜その2)。 良かったよかった(山科さんのコードはperl5.8.3未満でクラッシュするとありますが、perl本体というよりTest::*系の問題っぽいですね)。
さて、せっかくですので、autoboxを使ってハッシュリファレンスも同様にしてしまいましょう。ということで書いたのがautobox::PropHashです。えらくあっさりしたコードですが。 autoboxとautobox::Coreが必要です(ただしautobox::Coreは便利なメソッドが使えるように継承しているだけ)。
use autobox; use autobox::PropHash; my $obj = {a => {b => 'c'}}; print $obj->a->b; $obj->a->b = 'foo!'; print $obj->a->b; $obj = {}; $obj->a = 1; print $obj->a; $obj->b = [qw/foo bar hoge/]; print $obj->b->join(','); # foo,bar,hoge print $obj->keys->join(','); # a,b
AUTOLOAD
とlvalue
を使うことで $obj->a->b = 'foo!'
なところが粋だと思いませんか? 思いませんか。そうですか。
■2005-09-12
* [Perl][メモ] Class::Accessor::AutoLink
くさした気分を紛らわすために、Perlで楽々アクセサ〜3の2を試す…… このモジュールではオブジェクト毎に最初に配列リファレンスとハッシュリファレンスでアクセサを定義します。これ以外に方法思いつきません。 あー、あってるのかどうか、眠くてよくわかりません。
package MyClass; use base qw(Class::Accessor::AutoLink); my $def = [ 'foo', {bar => [ 'baz', {hoge => ['hoge']}, ]}, ]; __PACKAGE__->init_accessor($def); sub new { my $self = bless {}, shift; } package main; my $obj = MyClass->new(); $obj->foo = 1; $obj->bar->baz = 2; $obj->bar->hoge->hoge = 10;
AUTOLOADを繰り返さない方法(AUTOLOAD内で関数をevalする)のは弾さんがお書きになられてます。
* [Perl][メモ] Class::Accessor::AutoLinkその2
Class::Accessor::AutoLinkのアクセサ定義の方法を変更しました。下記の通り、普通にハッシュリファレンスを渡します。値がデフォルトに。もちろん、blessするハッシュリファレンスで値を上書き可能。
package MyClass; use base qw(Class::Accessor::AutoLink); my $def = { foo => 1, bar => { baz => 2, hoge => {hoe => 3}, }, }; MyClass->init_accessor($def); # init sub new { my $class = shift; my $self = shift; bless $self, $class; } package main; my $obj = MyClass->new({foo => 0});
■2005-09-25
* [メモ][Perl] prototypeベース
Class::Prototyped。PerlでprototypeベースなOOPを行うためのモジュール。
実現方法は概ね予想してたものに近い。
Class::Classless。 名前が粋。
* [漫画] 対岸の彼女
安孫子三和版の『対岸の彼女』。 原作読んでませんが、たぶん相当安孫子風になっているんだろうなあと想像。 とりあえずナナコが女装した吐夢で、葵が世良だった。 内容も地味に清々しくて良い読後感です。
30代、既婚、子持ちの「勝ち犬」小夜子と、独身、子なしの「負け犬」葵。性格も生活環境も全く違う二人の女性の友情は成立するのか!? (出版社 / 著者からの内容紹介)
って、そんな内容だったのか。
■2005-09-30
* [Perl] JSON-1.00
色々修正していたJSONとJSONRPCですが、10月に入るとまた時間があまり取れないのでとりあえずCPANにアップ。主な変更点は
・JSON::Converterのスピード向上。
大きな文字列の値をもったPerlデータ→JSON変換が劇的に早くなっています。
・JSONRPCサーバのApache、daemon対応とクライアント実装(適当)。
・マッピング中止オプション
JSON→Perl時にnullをJSON::NotStringオブジェクトに変換していたのですが、これだとjsonToobj('{"foo":null}')->{foo}の値がundefではないため、DBIのquote機能などで不都合がでると指摘されていました($dbh->quote($obj->{foo})で"NULL"が返らない)。
・裸のキーオプション、シングルクォートオプション
JSON::Parserで{foo:"bar"}や{foo:'bar'}なんかも通るように。
というわけで、JSONRPC系が少し充実してきたので1.00としてリリースしました。
_ kyo [ModBlosxomのcompatモジュールについて書いておきました。使ったことないので知らなかったとは口が裂けても..]
_ まかまか [や〜、わざわざありがとうございます。 作った本人もよく覚えていないというのは内緒の話です。]