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