Python::Serialise::Pickle
MailmanのML毎の設定ファイルをPerlからあれやこれやで覗き見したいなぁとか
思ってたのですが、MailmanのML設定ファイルはcPickleというものを使ってバイナリーデータに
シリアライズされています。
cPickleはPickleの実装をCでしたもので1000倍高速だとか。
PythonはぜんぜんわからんのでPickleってなんやーな状態だったわけですが、
CPANにお尋ねしてみたら、Python::Serialise::Pickleってのがありました。
さすがCPAN。
で、早速つかってみるのでした。
書き込み君
#! /usr/bin/perl use strict; use warnings; use Python::Serialise::Pickle; my $file = shift or die 'no file'; my $pw = Python::Serialise::Pickle->new("> $file"); $pw->dump(['a', 'list']); $pw->dump("a string"); $pw->dump(42); $pw->dump({'a'=>'hash'}); $pw->close();
読み込み君
#! /usr/bin/perl use strict; use warnings; use Python::Serialise::Pickle; use Data::Dumper; my $file = shift or die 'no file'; my $pr = Python::Serialise::Pickle->new("<$file"); while (my $data = $pr->load()) { print Dumper $data; }
読み込み結果
$VAR1 = [ 'a', 'list' ]; $VAR1 = 'a string'; $VAR1 = '42'; $VAR1 = { 'a' => 'hash' };
ただ、Mailmanのファイルを食わせるとダメポ。
We have no handler to deal with '}'
とか言って死ぬ。
うぐぐ、こうなったらInline::Pythonで(ry
my %_get_handlers = ( 'I' => \&_get_num, 'L' => \&_get_num, 'F' => \&_get_num, 'S' => \&_get_string, 'N' => \&_get_none, 'l' => \&_get_list, 'd' => \&_get_dict, 'c' => \&_get_raw, 'p' => \&_get_id, 'i' => \&_get_raw, '(' => \&_get_compound, );
確かに対応するもんがねーな。
2003年のモジュールだからしゃーねーのかな。
やっぱりInline::Pythonで(ry
Python::Serialise::Pickleはモジュールの中で、printしまくってるのがうざい。
参考)http://www.python.jp/doc/2.4/lib/module-cPickle.html
(追記)
http://rt.cpan.org/Public/Bug/Display.html?id=20244
おお、すでに!
(追記2)
よく読んだら時間がねーとかいってる。。放置系ですか><
(追記3)
やっぱり買うか。
みんなのPython
posted with amazlet on 07.03.23