Storableを用いた複雑なデータの保存と復帰

最近になって多重ハッシュをYAMLで吐き出したらデータをそのまま眺めてもよいし,便利じゃね?ということに気がついてYAMLでオブジェクトを保存していた.(ちゃんとbless情報まで保存される,Perl素敵)


容量が大きくなる場合はGDBMやらRDBMSやらを使っているのだが,唯一の難点はどんなデータが入っているのか,ちらりと見るのが面倒くさいということ.lessコマンドで見せてくれよ.


とここまで書いて気がついたのだが,そのDBを眺めるようなlessコマンドを自分で作ってしまえばいい.どうやってDB形式を判断するかは今のところわからないが,(fileコマンドで判断できそうだ 2008-01-20追記)それ以外ならつくれる.よし,今日は他にやることがあるから明日つくろう.(以下,数学的帰納法により永遠につくられないことが証明される).


閑話休題.しかしdbを使うまでもなく,それでも容量を少なく抑えたい場合はStorableモジュールを使うっぽい.標準モジュールなので追加の必要はない.storeの第1引数は必ずリファレンスを渡す.

use Storable;

my $hoge = SomeClass->new("some data");
store $hoge, 'somefilename';

my $foo = retrieve 'somefilename';
$foo->somemethod();

$fooを$hogeと全く同様の状態に復帰することができる.
圧縮のため,binary形式になってしまうのが唯一の難点.PerlだったらData::Dumperがよいのかもしれないけれど,他の言語で使うことを考えると現状はYAMLJSONが妥当な選択肢なんでしょうか.


研究室に置いてあった続・初めてのPerl(第1版)に書いてあった.まだアルパカレベルってことですね.

続・初めてのPerl - Perlオブジェクト、リファレンス、モジュール

続・初めてのPerl - Perlオブジェクト、リファレンス、モジュール