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