2008-01-31 22:57  第14号

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; を使うことができます。

    SEE ALSO

    Data::Dumper, 和訳

    use Data::Dumper; warn Dumper と打つのがめんどいので、たいていエディタにマクロを仕込んだりしてますが、XXX とか Smart::Comments というのを使うのもアリです。

    WRITTEN BY

    冨田 尚樹 <tomita@cpan.org>

    Feedback

    はてなブックマーク livedoorクリップ Yahoo!ブックマーク del.ico.us use Data::Dumper;

    Trackback

    url: http://e8y.net/mt/mt-tb.cgi/215

    Comments