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