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