今日のCPANモジュール(跡地)

宣伝と注意書き

このサイトが元になったCPANモジュールガイドという本を書きました。

本書でもとりあげています。

このページの最後で扱っている$Data::Dumper::Deparseには限界があるのですが、コードリファレンスを含むようなDumper結果を得たい(より再現性の高いシリアライズ)場合に使えるモジュールとしてData::Dump::Streamerの使い方も扱いました。

2008-01-31

use Data::Dumper;

今回は基本に立ち返り、Data::Dumper です。すでに説明なく何度も使ってる気もしますが、取り上げておくことに意味があると思うので、やります。

Data::Dumper はある変数のデータ構造を Perl のシンタックスで表現してくれるもので、デバッグ時など普通によく使います。Ruby の p().inspect()、JavaScript(Firefox)の .toSource() 相当のものです。Perl5 ではこれがモジュールでの提供です(コア・モジュールです)。

use Data::Dumper;

my $data = {
    name => 'Ultra Seven',
    human => 'Dan Moroboshi',
    transform => 'glasses',
    power => ['Emerium Beam', 'Eye Slugger', 'Wide Shot'],
};

warn Dumper $data;

# 出力 ---

$VAR1 = {
          'human' => 'Dan Moroboshi',
          'transform' => 'glasses',
          'power' => [
                       'Emerium Beam',
                       'Eye Slugger',
                       'Wide Shot'
                     ],
          'name' => 'Ultra Seven'
        };

Dumper にはいくつも引数を渡すことができます。ハッシュやリストを渡す時は、ばらばらになってしまわないよう \%table@list のようにリファレンスで渡すと良いです。

カスタマイズ

最初の $VAR数字 = 部分は、複数の変数の結果を eval する時にいいのかもしれませんが、たいていは要りません。気になる時やインデントを縮めたいとかいう場合は以下のように指定します。

use Data::Dumper;

local $Data::Dumper::Sortkeys = 1; # ハッシュのキーをソートする
local $Data::Dumper::Indent = 1; # インデントを縮める
local $Data::Dumper::Terse = 1; # $VAR数字要らない

warn Dumper $data;

# 出力結果 ---
{
  'human' => 'Dan Moroboshi',
  'name' => 'Ultra Seven',
  'power' => [
    'Emerium Beam',
    'Eye Slugger',
    'Wide Shot'
  ],
  'transform' => 'glasses'
}

他のオプションはこちらにあります。

オブジェクト・サブルーチン

Dumper した結果は eval して戻せるので、ファイルに書き出しておき do のファイル名構文で my $data = do 'ultra-seven.pl'; みたいにして復元できます。

オブジェクトやサブルーチンをシリアライズしたいことはあまりないと思いますが、オブジェクトはデフォルトでは

'wikipedia' => bless( do{(my $o = 'http://en.wikipedia.org/wiki/Ultra_Seven')}, 'URI::http' ),

といった感じに bless で表現されるので、モノによっては復元できます。

ただしサブルーチンについては sub { "DUMMY" } と出力され、そこにサブルーチンがあったことがわかるだけです。あまり必要ないでしょうがどうしても出したければ $Data::Dumper::Deparse = 1; を使うことができます。