5f91e5fef2a6c29424a54825539bfcbbd008ef09
[p5sagit/Data-Dumper-Concise.git] / lib / Data / Dumper / Concise.pm
1 package Data::Dumper::Concise;
2
3 use 5.006;
4
5 $VERSION = '1.000';
6
7 require Exporter;
8 require Data::Dumper;
9
10 BEGIN { @ISA = qw(Exporter) }
11
12 @EXPORT = qw(Dumper);
13
14 my $USAGE = 'Dumper() to get an object or Dumper($ref) to dump a reference please';
15
16 sub Dumper {
17   die $USAGE if @_ > 1;
18   my $dd = Data::Dumper->new([]);
19   $dd->Terse(1)->Indent(1)->Useqq(1)->Deparse(1)->Quotekeys(0)->Sortkeys(1);
20   return $dd unless @_;
21   my $ref = $_[0];
22   die $USAGE unless ref($ref);
23   return $dd->Values([ $ref ])->Dump;
24 }
25
26 =head1 NAME
27
28 Data::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
36 is 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
49 whereas
50
51   my $dd = Dumper;
52
53 is equivalent to:
54
55   my $dd = Data::Dumper->new([])
56                        ->Terse(1)
57                        ->Indent(1)
58                        ->Useqq(1)
59                        ->Deparse(1)
60                        ->Quotekeys(0)
61                        ->Sortkeys(1);
62
63 So for the structure:
64
65   { foo => "bar\nbaz", quux => sub { "fleem" } };
66
67 Data::Dumper::Concise will give you:
68
69   {
70     foo => "bar\nbaz",
71     quux => sub {
72         use warnings;
73         use strict 'refs';
74         'fleem';
75     }
76   }
77
78 instead of the default Data::Dumper output:
79
80   $VAR1 = {
81         'quux' => sub { "DUMMY" },
82         'foo' => 'bar
83   baz'
84   };
85
86 (note the tab indentation, oh joy ...)
87
88 =head1 DESCRIPTION
89
90 This module always exports a single function, Dumper, which can be called
91 with a single reference value to dump that value or with no arguments to
92 return the Data::Dumper object it's created.
93
94 It exists, fundamentally, as a convenient way to reproduce a set of Dumper
95 options that we've found ourselves using across large numbers of applications,
96 primarily for debugging output.
97
98 Why is deparsing on when the aim is concision? Because you often want to know
99 what subroutine refs you have when debugging and because if you were planning
100 to eval this back in you probably wanted to remove subrefs first and add them
101 back in a custom way anyway. Note that this -does- force using the pure perl
102 Dumper rather than the XS one, but I've never in my life seen Data::Dumper
103 show up in a profile so "who cares?".
104
105 =head1 AUTHOR
106
107 Matt S. Trout <mst@shadowcat.co.uk>
108
109 =head1 CONTRIBUTORS
110
111 None required yet. Maybe this module is perfect (hahahahaha ...).
112
113 =head1 COPYRIGHT
114
115 Copyright (c) 2009 the Data::Dumper::Concise L</AUTHOR> and L</CONTRIBUTORS>
116 as listed above.
117
118 =head1 LICENSE
119
120 This library is free software and may be distributed under the same terms
121 as perl itself.
122
123 =cut
124
125 1;