読者です 読者をやめる 読者になる 読者になる

IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Data::DumperかData::Dumpか?

Data::Dumpというモジュールがあり、Data::Dumperとどう違うのだろうと思ったところ、どうもData::Dumperの使いにくい部分があったため、Data::Dumpを作ったようです。使いどころとしては、

  1. 簡素な出力をしたいとき
  2. DeepCopyをしたいとき

のようです。

#ロードの確認
$ perl -MData::Dump -e 'print 1;'
1

#数値出力
$ perl -MData::Dump -e 'print Data::Dump::dump(1);'
1

#配列のレファレンス
$ perl -MData::Dump -e 'print Data::Dump::dump(+[1,2,3]);'
[1, 2, 3]

#配列
$ perl -MData::Dump -e 'print Data::Dump::dump((1,2,3));'
(1, 2, 3)

#配列
$ perl -MData::Dump -e '@foo=('a','b',2);print Data::Dump::dump(@foo);'
("a", "b", 2)

#レファレンスした配列
$ perl -MData::Dump -e '@foo=('a','b',2);print Data::Dump::dump(\@foo);'
["a", "b", 2]

#配列の要素数
$ perl -MData::Dump -e '@foo=('a','b',2);print Data::Dump::dump(scalar(@foo));'
3

#ハッシュ
$ perl -MData::Dump -e '%foo=('a','b',2,4);print Data::Dump::dump(%foo);'       ("a", "b", 2, 4)

#レファレンスしたハッシュ
$ perl -MData::Dump -e '%foo=('a','b',2,4);print Data::Dump::dump(\%foo);'
{ 2 => 4, a => "b" }

#ハッシュ
$ perl -MData::Dump -e '%foo=('a'=>'b',2=>4);print Data::Dump::dump(%foo);'
("a", "b", 2, 4)

#レファレンスしたハッシュ
$ perl -MData::Dump -e '%foo=('a'=>'b',2=>4);print Data::Dump::dump(\%foo);'
{ 2 => 4, a => "b" }

#ハッシュレファレンス
$ perl -MData::Dump -e '$foo={'a'=>'b',2=>4};print Data::Dump::dump($foo);'
{ 2 => 4, a => "b" }

#Data::Dump::dumpの結果をevalしてみる
$ perl -MData::Dump -e '$foo={'a'=>'b',2=>4};$bar=eval {Data::Dump::dump($foo)};print Data::Dump::dump($bar);'
"{ 2 => 4, a => \"b\" }"

#Data::Dump::dumpの結果をevalしてみる
$ perl -MData::Dump -MData::Dumper -e '$foo={'a'=>'b',2=>4};$bar=eval {Data::Dump::dump($foo)};print Dumper($bar);'
$VAR1 = '{ 2 => 4, a => "b" }';

#Data::Dump::dumpの結果をevalしてみる

$ perl -MData::Dump -MData::Dumper -e '$foo={'a'=>'b',2=>+[9,8,7]};$bar=eval {Data::Dump::dump($foo)};print Dumper($bar);'
$VAR1 = '{ 2 => [9, 8, 7], a => "b" }';