Hatena::Groupperl

Perl Tech RSSフィード

2006-05-08

データの直列化(シリアライゼーション)まとめ はてなブックマーク - データの直列化(シリアライゼーション)まとめ - Perl Tech

データの直列化とは,大雑把に言えばPerlのデータ構造(スカラー,配列,ハッシュ,リファレンスなど)を単一の文字列で表現することだ。例えば以下のようなデータをファイルに保存したいとする。

my $data = 'hoge';

これを保存するにはprintで出力するだけで良い。

open my $fh, '>data.txt' or die $!;
print $fh $data;

配列になると少し複雑になる。

my @data = ('a', 'b', 'c');
open my $fh, '>file.txt' or die $!;
print $fh join "\n", @data;
# 後で読み出す時に・・・
my @data = <$fh>;

この例のように改行が区切り文字なっていればまだマシだが,データ自体に改行文字が入っていると使えない。さらに,以下のようなデータではもう手が付けられない。

# どうやって保存すれば・・・(;´Д`)
my $data = {
  hoge => 'a',
  foo  => 'b',
  bar  => ['c', 'd', 'e'],
};

頑張って独自の保存フォーマットを考えることも出来るが,保存フォーマットがデータ構造に依存しているためにデータ構造が変わるたびにコードの書き直しになる。このような時のために,どんなデータ構造にも対応するように保存フォーマットを汎用化したのがデータ直列化モジュール(シリアライザ)である。以下に代表的なデータ直列化モジュールをまとめてみた。

Data::Dumper

Data::Dumperはデータ構造をPerlコードで表現する。データを復元するにはevalするだけでよい。evalを使うため,外部の人間のコードを実行してしまう危険をはらんでいる。Data::TreeDumperはWindowsのエクスプローラのようにツリー状のフォーマットで直列化する。

YAML,JSON

YAMLはデータ直列化に使用することを目的に考案された言語で,Perl以外のスクリプト言語でも使用できる。一方,JSONは直列化にJavaScriptコードを利用したもので,YAMLとJSONは互いに記法の互換性が有る。

Storable,FreezeThaw

Storableはバイナリデータで直列化を行うモジュールで,他のモジュールに比べて高速に動作する。FreezeThawはテキストデータだが圧縮率が高い独自フォーマットを使っている。StorableはPerlのバージョン間で互換性が無いという欠点が有る。

XML::Dumper

このモジュールはXMLでデータを直列化する。Perl以外のシステムとの相互運用に使えるかもしれない。

直列化を利用したモジュール

Tie::SaveLaterはデータの直列化,保存,復元を自動化するためのフレームワークで,AnyDBM_Fileと同じ使い勝手を実現してくれる。Data::Serializerはデータ直列化を拡張し,暗号化や圧縮ができるようにしたものだ。

まとめ

直列化モジュールを使うことにより,データベースのO/Rマッピングの様なことが簡単に実現できる。アプリケーションのデータベースや設定ファイルの保存に使ってみると便利である。

いちげんさんいちげんさん2007/03/14 11:53はじめまして、以下のURLいれてみましたが、日本語ででません。
アチラ側のWEBサービスの問題でしょうか・・?
http://www.forbes.com/feeds/popstories.xml