6

Data::Dumper::Dumper()メソッドを使用しています。出力は良いですが、少しコンパクトにできて見栄えが良くなります。

どうすればそれを制御できますか?より良い代替手段は何ですか?

4

7 に答える 7

21

Data :: Dumpに似たものがないか、 Data :: Dumpを見てください。ただし、かなりの印刷が得意です。

編集(20120304):私はこの質問を完全に忘れていましたが、今日それは賛成され、それは私の記憶を揺さぶった。今日(3年後)Perlできれいに印刷するために何かをお勧めしなければならない場合、私は確かData::Printerを使用します。Data :: Printer自身の理論的根拠から:

Data :: Dumperは素晴らしいツールであり、データ構造を元にeval戻すのに適した方法で文字列化することを目的としています。

重要なのは、多くの人がそれ(およびData :: Dumpなどの同様のもの)を使用して、検査とデバッグのためにデータ構造とオブジェクトを画面に印刷することです。これらのモジュールを使用することはできますが、それは意味がありません。する必要があることを意味します

これがData::Printerの出番です。これは、1つのことと1つのことだけを行うことを目的としてい ます。Perl変数とオブジェクトを適切にフォーマットされて(人間が検査できるように)画面に表示します。

于 2009-10-20T16:15:16.813 に答える
5

(表示用ではなく) ストレージ用に出力をシリアライズしたい場合は、 Storablefreeze()を見てくださいthaw()。DB またはキャッシュにデータ構造を保存するために Data::Dumper が使用されているのを見るたびに、私はうんざりします。:(

于 2009-10-20T16:21:45.343 に答える
4

私は通常 Data::Dump::Streamer を使用しますが、他の人が言ったように、Data::Dumper のオプションが十分でない場合にのみ使用します。

于 2009-10-20T16:50:14.490 に答える
3

Data::Dumperの 1 つの代替*は、JSONとその Perl 実装JSONです。

良いかどうかはあなた次第です。

于 2009-10-20T15:56:39.317 に答える
2

1つのオプションは、Data :: Dumper :: Perltidyを使用することです。これは(多かれ少なかれ)Data :: Dumper :: Dumper()のドロップイン置換ですが、Perltidyを使用して出力をフォーマットします。

于 2009-10-20T21:57:45.077 に答える
2

ダンプ出力だけを探している場合: Smart::Comments.

あなただけuseです。

use Smart::Commments;

次に、単純な変数を次のように 3 つのハッシュ コメントに入れます。

my $v = black_box_process();
### $v

そして、可能な限り最も美しい印刷でそれをダンプします。

次のように、より複雑な式を管理することもできます。

### ( $a && ( $b ^ ( $c || $d ))) : ( $a && ( $b ^ ( $c || $d )))

ただし、「コロンパス」に注意する必要があります。

### $My::Package::variable

また

### %マイ::パッケージ::

私の経験では働いたことはありません。それらを機能させたい場合は、次のようなものが必要です。

my %stash = %My::Package::;
### %stash

また、ドキュメンテーションを読めばわかるように、他にもたくさんのかわいいトリックを実行します。

于 2009-10-20T19:22:57.247 に答える
2

Data::Dumper::Conciseも別の可能性です。

use Data::Dumper::Concise;
warn Dumper($var);

次と同等です。

use Data::Dumper;
{
  local $Data::Dumper::Terse = 1;
  local $Data::Dumper::Indent = 1;
  local $Data::Dumper::Useqq = 1;
  local $Data::Dumper::Deparse = 1;
  local $Data::Dumper::Quotekeys = 0;
  local $Data::Dumper::Sortkeys = 1;
  warn Dumper($var);
}
于 2011-05-20T15:18:25.197 に答える