Hatena::Groupcside

Cside::StudyMemo このページをアンテナに追加 RSSフィード

メインブログに書くまでもない自分用メモを垂れ流す。日々是勉強也。

カテゴリー
 | 

2013-06-06

[]Data::Dumper のよく使うオプション

perlで改行など特殊文字が含まれるものをDumpする時は - $shibayu36->blog;

Useqq オプション便利すね。


Indent, Terse

よく使う。出力結果をコンパクトにしてくれる。

use Data::Dumper;

my $data = { foo => 1, bar => [1, 2] };
warn Dumper $data;
# $VAR1 = {
#           'bar' => [
#                      1,
#                      2
#                    ],
#           'foo' => 1
#         };

local $Data::Dumper::Indent = 1;  # インデントの深さレベル
local $Data::Dumper::Terse  = 1;  # "$VAR1 = " 消す

warn Dumper $data;
# {
#   'bar' => [
#     1,
#     2
#   ],
#   'foo' => 1
# }

ちなみにオプションは、localを使って設定しとくとスコープ限定できて良い。

自分は、Vimのスニペットに

use Data::Dumper;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Terse  = 1;
warn Dumper 

を d とかで呼び出せるように登録してる。

Deparse

サブルーチンをDumpできる。ただし実体とまったく同じものではない。

use Data::Dumper;
use Path::Class qw(file);

warn Dumper \&file;
# $VAR1 = sub { "DUMMY" };

local $Data::Dumper::Deparse = 1;
warn Dumper \&file;
# $VAR1 = sub {
#             package Path::Class;
#             use strict 'refs';
#             'Path::Class::File'->new(@_);
#         };

Data::Dump::Streamer 使っても同じ事ができる。


こっからは Data::Dumper からは脱線した余談。 


Data::Dump について

デフォルトだとインデントが豪快な Data::Dumper に対して、Data::Dump は出力が最初からコンパクト。

my $data = { foo => 1, bar => [1, 2] };

use Data::Dump qw(dump);
warn dump $data;
# { bar => [1, 2], foo => 1 }

use Data::Dumper;
warn Dumper $data;
# $VAR1 = {
#           'bar' => [
#                      1,
#                      2
#                    ],
#           'foo' => 1
#         };

コンパクトなほうが好きな人はこれ使えばいいと思う。

僕はオブジェクトのdump結果が Data::Dumper よりも見難く感じるから使ってない。

おまけ:変数名も一緒にdumpする

Data::Dumper::Names というのがある

use Data::Dumper::Names;

my $foo;
my @bar = qw/this that/;
warn Dumper($foo, \@bar);
# $foo = undef;
# @bar = (
#     'this',
#     'that'
# );

おまけ2:カラフルなdumper

Data::Printer というのがある

See Also

 |