Add DumperObject for getting at the underlying obj
[p5sagit/Data-Dumper-Concise.git] / lib / Data / Dumper / Concise.pm
CommitLineData
6d2a9a35 1package Data::Dumper::Concise;
2
3use 5.006;
4
452e7ff2 5$VERSION = '2.012';
6d2a9a35 6
7require Exporter;
8require Data::Dumper;
9
10BEGIN { @ISA = qw(Exporter) }
11
7bbc3007 12@EXPORT = qw(Dumper DumperF DumperObject);
6d2a9a35 13
7bbc3007 14sub DumperObject {
6d2a9a35 15 my $dd = Data::Dumper->new([]);
16 $dd->Terse(1)->Indent(1)->Useqq(1)->Deparse(1)->Quotekeys(0)->Sortkeys(1);
6d2a9a35 17}
18
7bbc3007 19sub Dumper { DumperObject->Values([ @_ ])->Dump }
20
92264889 21sub DumperF (&@) {
22 my $code = shift;
23 return $code->(map Dumper($_), @_);
24}
25
6d2a9a35 26=head1 NAME
27
28Data::Dumper::Concise - Less indentation and newlines plus sub deparsing
29
30=head1 SYNOPSIS
31
32 use Data::Dumper::Concise;
33
34 warn Dumper($var);
35
36is equivalent to:
37
38 use Data::Dumper;
39 {
40 local $Data::Dumper::Terse = 1;
41 local $Data::Dumper::Indent = 1;
42 local $Data::Dumper::Useqq = 1;
43 local $Data::Dumper::Deparse = 1;
44 local $Data::Dumper::Quotekeys = 0;
45 local $Data::Dumper::Sortkeys = 1;
46 warn Dumper($var);
47 }
48
6d2a9a35 49So for the structure:
50
51 { foo => "bar\nbaz", quux => sub { "fleem" } };
52
53Data::Dumper::Concise will give you:
54
55 {
56 foo => "bar\nbaz",
57 quux => sub {
58 use warnings;
59 use strict 'refs';
60 'fleem';
61 }
62 }
63
64instead of the default Data::Dumper output:
65
66 $VAR1 = {
9469b5b0 67 'quux' => sub { "DUMMY" },
68 'foo' => 'bar
6d2a9a35 69 baz'
70 };
71
72(note the tab indentation, oh joy ...)
73
7bbc3007 74If you need to get the underlying L<Dumper> object just call C<DumperObject>.
75
92264889 76Also try out C<DumperF> which takes a C<CodeRef> as the first argument to
77format the output. For example:
78
79 use Data::Dumper::Concise;
80
81 warn DumperF { "result: $_[0] result2: $_[1]" } $foo, $bar;
82
83Which is the same as:
84
85 warn 'result: ' . Dumper($foo) . ' result2: ' . Dumper($bar);
86
6d2a9a35 87=head1 DESCRIPTION
88
89This module always exports a single function, Dumper, which can be called
39d55feb 90with an array of values to dump those values.
6d2a9a35 91
92It exists, fundamentally, as a convenient way to reproduce a set of Dumper
93options that we've found ourselves using across large numbers of applications,
94primarily for debugging output.
95
73939723 96The principle guiding theme is "all the concision you can get while still
97having a useful dump and not doing anything cleverer than setting Data::Dumper
98options" - it's been pointed out to us that Data::Dump::Streamer can produce
99shorter output with less lines of code. We know. This is simpler and we've
100never seen it segfault. But for complex/weird structures, it generally rocks.
101You should use it as well, when Concise is underkill. We do.
102
6d2a9a35 103Why is deparsing on when the aim is concision? Because you often want to know
104what subroutine refs you have when debugging and because if you were planning
105to eval this back in you probably wanted to remove subrefs first and add them
106back in a custom way anyway. Note that this -does- force using the pure perl
107Dumper rather than the XS one, but I've never in my life seen Data::Dumper
108show up in a profile so "who cares?".
109
73939723 110=head1 BUT BUT BUT ...
111
112Yes, we know. Consider this module in the ::Tiny spirit and feel free to
113write a Data::Dumper::Concise::ButWithExtraTwiddlyBits if it makes you
114happy. Then tell us so we can add it to the see also section.
115
42f8d5be 116=head1 SUGARY SYNTAX
117
118This package also provides:
119
120L<Data::Dumper::Concise::Sugar> - provides Dwarn and DwarnS convenience functions
121
122L<Devel::Dwarn> - shorter form for Data::Dumper::Concise::Sugar
123
73939723 124=head1 SEE ALSO
125
126We use for some purposes, and dearly love, the following alternatives:
127
128L<Data::Dump> - prettiness oriented but not amazingly configurable
129
130L<Data::Dump::Streamer> - brilliant. beautiful. insane. extensive. excessive. try it.
131
132L<JSON::XS> - no, really. If it's just plain data, JSON is a great option.
133
6d2a9a35 134=head1 AUTHOR
135
42f8d5be 136mst - Matt S. Trout <mst@shadowcat.co.uk>
6d2a9a35 137
138=head1 CONTRIBUTORS
139
42f8d5be 140frew - Arthur Axel "fREW" Schmidt <frioux@gmail.com>
6d2a9a35 141
142=head1 COPYRIGHT
143
39d55feb 144Copyright (c) 2010 the Data::Dumper::Concise L</AUTHOR> and L</CONTRIBUTORS>
6d2a9a35 145as listed above.
146
147=head1 LICENSE
148
149This library is free software and may be distributed under the same terms
150as perl itself.
151
152=cut
153
1541;