1Data::Printer(3)      User Contributed Perl Documentation     Data::Printer(3)
2
3
4

NAME

6       Data::Printer - colored & full-featured pretty print of Perl data
7       structures and objects
8

SYNOPSIS

10       Want to see what's inside a variable in a complete, colored and human-
11       friendly way?
12
13           use DDP;  # same as 'use Data::Printer'
14
15           p $some_var;
16           p $some_var, as => "This label will be printed too!";
17
18           # no need to use '\' before arrays or hashes!
19           p @array;
20           p %hash;
21
22           # printing anonymous array references:
23           p [ $one, $two, $three ]->@*;    # perl 5.24 or later!
24           p @{[ $one, $two, $three ]};     # same, older perls
25           &p( [ $one, $two, $three ] );    # same, older perls
26
27           # printing anonymous hash references:
28           p { foo => $foo, bar => $bar }->%*;   # perl 5.24 or later!
29           p %{{ foo => $foo, bar => $bar }};    # same, older perls
30           &p( { foo => $foo, bar => $bar } );   # same, older perls
31
32       The snippets above will print the contents of the chosen variables to
33       STDERR on your terminal, with colors and a few extra features to help
34       you debug your code.
35
36       If you wish to grab the output and handle it yourself, call np():
37
38           my $dump = np $var;
39
40           die "this is what happened: " . np %data;
41
42       The np() function is the same as p() but will return the string
43       containing the dump. By default it has no colors, but you can change
44       that easily too.
45
46       That's pretty much it :)
47
48       Data::Printer is fully customizable, even on a per-module basis! Once
49       you figure out your own preferences, create a .dataprinter
50       configuration file for yourself (or one for each project) and
51       Data::Printer will automatically use it!
52

FEATURES

54       Here's what Data::Printer offers Perl developers, out of the box:
55
56       •   Variable dumps designed for easy parsing by the human brain, not a
57           machine.
58
59Highly customizable, from indentation size to depth level.  You can
60           even rename the exported p() function!
61
62Beautiful (and customizable) colors to highlight variable dumps and
63           make issues stand-out quickly on your console. Comes bundled with
64           several themes for you to pick that work on light and dark terminal
65           backgrounds, and you can create your own as well.
66
67Filters for specific data structures and objects to make debugging
68           much, much easier. Includes filters for many popular classes from
69           CPAN like JSON::*, URI, HTTP::*, LWP, Digest::*, DBI and
70           DBIx::Class.  printing what really matters to developers debugging
71           code. It also lets you create your own custom filters easily.
72
73       •   Lets you inspect information that's otherwise difficult to
74           find/debug in Perl 5, like circular references, reference counting
75           (refcount), weak/read-only information, overloaded operators,
76           tainted data, ties, dual vars, even estimated data size - all to
77           help you spot issues with your data like leaks without having to
78           know a lot about internal data structures or install hardcore tools
79           like Devel::Peek and Devel::Gladiator.
80
81Full support for dumping perl 5.38 native classes.
82
83       •   keep your custom settings on a .dataprinter file that allows
84           different options per module being analyzed! You can have one
85           ".dataprinter" file per project, or default to one in your home
86           directory. You may also create a custom profile class with your
87           preferences and filters and upload it to CPAN.
88
89output to many different targets like files, variables or open
90           handles (defaults to STDERR). You can send your dumps to the screen
91           or anywhere else, and customize this setting on a per-project or
92           even per-module basis, like print everything from Some::Module to a
93           debug.log file with extra info, and everything else to STDERR.
94
95Easy to learn, easy to master. Seriously, the synopsis above and
96           the customization section below cover about 90% of all use cases.
97
98       •   Works on Perl 5.8 and later. Because you can't control where you
99           debug, we try our best to be compatible with all versions of Perl
100           5, from the oldest available to the bleeding edge.
101
102       •   Best of all? All that with No non-core dependencies, Zero. Nada. So
103           don't worry about adding extra weight to your project, as
104           Data::Printer can be easily added/removed.
105

DESCRIPTION

107       The ever-popular Data::Dumper is a fantastic tool, meant to stringify
108       data structures in a way they are suitable for being "eval"'ed back in.
109       The thing is, a lot of people keep using it (and similar ones, like
110       Data::Dump) to print data structures and objects on screen for
111       inspection and debugging, and while you can use those modules for that,
112       it doesn't mean you should.
113
114       This is where Data::Printer comes in. It is meant to do one thing and
115       one thing only:
116
117       format Perl variables and objects to be inspected by a human
118
119       If you want to serialize/store/restore Perl data structures, this
120       module will NOT help you. Try Storable, Data::Dumper, JSON, or
121       whatever. CPAN is full of such solutions!
122
123       Whenever you type "use Data::Printer" or "use DDP", we export two
124       functions to your namespace:
125
126   p()
127       This function pretty-prints the contents of whatever variable to STDERR
128       (by default), and will use colors by default if your terminal supports
129       it.
130
131           p @some_array;
132           p %some_hash;
133           p $scalar_or_ref;
134
135       Note that anonymous structures will only work if you postderef them:
136
137           p [$foo, $bar, $baz]->@*;
138
139       you may also deref it manually:
140
141           p %{{ foo => $foo }};
142
143       or prefix p() with "&":
144
145           &p( [$foo, $bar, $baz] );    # & (note mandatory parenthesis)
146
147       You can pass custom options that will work only on that particular
148       call:
149
150           p @var, as => "some label", colorized => 0;
151           p %var, show_memsize => 1;
152
153       By default, p() prints to STDERR and returns the same variable being
154       dumped. This lets you quickly wrap variables with p() without worrying
155       about changing return values. It means that if you change this:
156
157           sub foo { my $x = shift + 13; $x }
158
159       to this:
160
161           sub foo { my $x = shift + 13; p($x) }
162
163       The function will still return $x after printing the contents. This
164       form of handling data even allows method chaining, so if you want to
165       inspect what's going on in the middle of this:
166
167           $object->foo->bar->baz;
168
169       You can just add "DDP::p" anywhere:
170
171           $object->foo->DDP::p->bar->baz; # what happens to $object after ->foo?
172
173       Check out the customization quick reference section below for all
174       available options, including changing the return type, output target
175       and a lot more.
176
177   np()
178       The np() function behaves exactly like p() except it always returns the
179       string containing the dump (thus ignoring any setting regarding dump
180       mode or destination), and contains no colors by default. In fact, the
181       only way to force a colored np() is to pass "colored => 1" as an
182       argument to each call. It is meant to provide an easy way to fetch the
183       dump and send it to some unsupported target, or appended to some other
184       text (like part of a log message).
185

CUSTOMIZATION

187       There are 3 possible ways to customize Data::Printer:
188
189       1. [RECOMMENDED] Creating a ".dataprinter" file either on your home
190       directory or your project's base directory, or both,  or wherever you
191       set the "DATAPRINTERRC" environment variable to.
192
193       2. Setting custom properties on module load. This will override any
194       setting from your config file on the namespace (package/module) it was
195       called:
196
197           use DDP max_depth => 2, deparse => 1;
198
199       3. Setting custom properties on the actual call to p() or np(). This
200       overrides all other settings:
201
202           p $var, show_tainted => 1, indent => 2;
203
204   The .dataprinter configuration file
205       The most powerful way to customize Data::Printer is to have a
206       ".dataprinter" file in your home directory or your project's root
207       directory. The format is super simple and can be understood in the
208       example below:
209
210           # global settings (note that only full line comments are accepted)
211           max_depth       = 1
212           theme           = Monokai
213           class.stringify = 0
214
215           # use quotes if you want spaces to be significant:
216           hash_separator  = " => "
217
218           # You can set rules that apply only to a specific
219           # caller module (in this case, MyApp::Some::Module):
220           [MyApp::Some::Module]
221           max_depth    = 2
222           class.expand = 0
223           escape_chars = nonlatin1
224
225           [MyApp::Other::Module]
226           multiline = 0
227           output    = /var/log/myapp/debug.data
228
229           # use 'quiet' to silence all output from p() and np()
230           # called from the specified package.
231           [MyApp::Yet::Another]
232           quiet = 1
233
234       Note that if you set custom properties as arguments to p() or np(), you
235       should group suboptions as a hashref. So while the ".dataprinter" file
236       has ""class.expand = 0"" and ""class.inherited = none"", the equivalent
237       code is ""class => { expand => 0, inherited => 'none' }"".
238
239       live updating your .dataprinter without restarts
240
241       Data::Printer 1.1 introduces a new 'live_update' flag that can be set
242       to a positive integer to enable live updates. When this mode is on,
243       Data::Printer will check if the ".dataprinter" file has been updated
244       and, if so, it will reload it. This way you can toggle features on and
245       off and control output verbosity directly from your ".dataprinter" file
246       without needing to change or restart running code.
247
248   Properties Quick Reference
249       Below are (almost) all available properties and their (hopefully sane)
250       default values. See Data::Printer::Object for further information on
251       each of them:
252
253           # scalar options
254           show_tainted      = 1
255           show_unicode      = 1
256           show_lvalue       = 1
257           print_escapes     = 0
258           scalar_quotes     = "
259           escape_chars      = none
260           string_max        = 4096
261           string_preserve   = begin
262           string_overflow   = '(...skipping __SKIPPED__ chars...)'
263           unicode_charnames = 0
264
265           # array options
266           array_max      = 100
267           array_preserve = begin
268           array_overflow = '(...skipping __SKIPPED__ items...)'
269           index          = 1
270
271           # hash options
272           hash_max       = 100
273           hash_preserve  = begin
274           hash_overflow  = '(...skipping __SKIPPED__ keys...)'
275           hash_separator = '   '
276           align_hash     = 1
277           sort_keys      = 1
278           quote_keys     = auto
279
280           # general options
281           name           = var
282           return_value   = pass
283           output         = stderr
284           use_prototypes = 1
285           indent         = 4
286           show_readonly  = 1
287           show_tied      = 1
288           show_dualvar   = lax
289           show_weak      = 1
290           show_refcount  = 0
291           show_memsize   = 0
292           memsize_unit   = auto
293           separator      = ,
294           end_separator  = 0
295           caller_info    = 0
296           caller_message = 'Printing in line __LINE__ of __FILENAME__'
297           max_depth      = 0
298           deparse        = 0
299           alias          = p
300           warnings       = 1
301
302           # colorization (see Colors & Themes below)
303           colored = auto
304           theme   = Material
305
306           # object output
307           class_method             = _data_printer
308           class.parents            = 1
309           class.linear_isa         = auto
310           class.universal          = 1
311           class.expand             = 1
312           class.stringify          = 1
313           class.show_reftype       = 0
314           class.show_overloads     = 1
315           class.show_methods       = all
316           class.sort_methods       = 1
317           class.inherited          = none
318           class.format_inheritance = string
319           class.parent_filters     = 1
320           class.internals          = 1
321
322       Settings' shortcuts
323
324as - prints a string before the dump. So:
325
326               p $some_var, as => 'here!';
327
328           is a shortcut to:
329
330               p $some_var, caller_info => 1, caller_message => 'here!';
331
332multiline - lets you create shorter dumps. By setting it to 0, we
333           use a single space as linebreak and disable the array index.
334           Setting it to 1 (the default) goes back to using "\n" as linebreak
335           and restore whatever array index you had originally.
336
337fulldump - when set to 1, disables all max string/hash/array
338           values. Use this to generate complete (full) dumps of all your
339           content, which is trimmed by default.
340
341quiet - when set to 1, disables all data parsing and returns as
342           quickly as possible. Use this to disable all output from p() and
343           np() inside a particular package, either from the 'use' call or
344           from .dataprinter.  (introduced in version 1.1)
345
346   Colors & Themes
347       Data::Printer lets you set custom colors for pretty much every part of
348       the content being printed. For example, if you want numbers to be shown
349       in bright green, just put "colors.number = #00ff00" on your
350       configuration file.
351
352       See Data::Printer::Theme for the full list of labels, ways to represent
353       and customize colors, and even how to group them in your own custom
354       theme.
355
356       The colorization is set by the "colored" property. It can be set to 0
357       (never colorize), 1 (always colorize) or 'auto' (the default), which
358       will colorize p() only when there is no "ANSI_COLORS_DISABLED"
359       environment variable, the output is going to the terminal (STDOUT or
360       STDERR) and your terminal actually supports colors.
361
362   Profiles
363       You may bundle your settings and filters into a profile module.  It
364       works like a configuration file but gives you the power and flexibility
365       to use Perl code to find out what to print and how to print. It also
366       lets you use CPAN to store your preferred settings and install them
367       into your projects just like a regular dependency.
368
369           use DDP profile => 'ProfileName';
370
371       See Data::Printer::Profile for all the ways to load a profile, a list
372       of available profiles and how to make one yourself.
373
374   Filters
375       Data::Printer works by passing your variable to a different set of
376       filters, depending on whether it's a scalar, a hash, an array, an
377       object, etc. It comes bundled with filters for all native data types
378       (always enabled, but overwritable), including a generic object filter
379       that pretty-prints regular and Moo(se) objects and is even aware of
380       Role::Tiny.
381
382       Data::Printer also comes with filter bundles that can be quickly
383       activated to make it easier to debug binary data and many popular CPAN
384       modules that handle date and time, databases (yes, even DBIx::Class),
385       message digests like MD5 and SHA1, and JSON and Web content like HTTP
386       requests and responses.
387
388       So much so we recommend everyone to activate all bundled filters by
389       putting the following line on your ".dataprinter" file:
390
391           filters = ContentType, DateTime, DB, Digest, Web
392
393       Creating your custom filters is very easy, and you're encouraged to
394       upload them to CPAN. There are many options available under the
395       "Data::Printer::Filter::*" namespace. Check Data::Printer::Filter for
396       more information!
397
398   Making your classes DDP-aware (without adding any dependencies!)
399       The default object filter will first check if the class implements a
400       sub called '_data_printer()' (or whatever you set the "class_method"
401       option to in your settings). If so, Data::Printer will use it to get
402       the string to print instead of making a regular class dump.
403
404       This means you could have the following in one of your classes:
405
406         sub _data_printer {
407             my ($self, $ddp) = @_;
408             return 'Hey, no peeking! But foo contains ' . $self->foo;
409         }
410
411       Notice that you can do this without adding Data::Printer as a
412       dependency to your project! Just write your sub and it will be called
413       with the object to be printed and a $ddp object ready for you. See
414       Data::Printer::Object for how to use it to pretty-print your data.
415
416       Finally, if your object implements string overload or provides a method
417       called "to_string", "as_string" or "stringify", Data::Printer will use
418       it. To disable this behaviour, set "class.stringify = 0" on your
419       ".dataprinter" file, or call p() with "class => { stringify => 0 }".
420
421       Loading a filter for that particular class will of course override
422       these settings.
423

CAVEATS

425       You can't pass more than one variable at a time.
426
427          p $foo, $bar;       # wrong
428          p $foo; p $bar;     # right
429
430       You can't use it in variable declarations (it will most likely not do
431       what you want):
432
433           p my @array = qw(a b c d);          # wrong
434           my @array = qw(a b c d); p @array;  # right
435
436       If you pass a nonexistant key/index to DDP using prototypes, they will
437       trigger autovivification:
438
439           use DDP;
440           my %foo;
441           p $foo{bar}; # undef, but will create the 'bar' key (with undef)
442
443           my @x;
444           p $x[5]; # undef, but will initialize the array with 5 elements (all undef)
445
446       Slices (both array and hash) must be coerced into actual arrays (or
447       hashes) to properly shown. So if you want to print a slice, instead of
448       doing something like this:
449
450           p @somevar[1..10]; # WRONG! DON'T DO THIS!
451
452       try one of those:
453
454           my @x = @somevar[1..10]; p @x;   # works!
455           p [ @somevar[1..0] ]->@*;        # also works!
456           p @{[@somevar[1..0]]};           # this works too!!
457
458       Finally, as mentioned before, you cannot pass anonymous references on
459       the default mode of "use_prototypes = 1":
460
461           p { foo => 1 };       # wrong!
462           p %{{ foo => 1 }};    # right
463           p { foo => 1 }->%*;   # right on perl 5.24+
464           &p( { foo => 1 } );   # right, but requires the parenthesis
465           sub pp { p @_ };      # wrapping it also lets you use anonymous data.
466
467           use DDP use_prototypes => 0;
468           p { foo => 1 };   # works, but now p(@foo) will fail, you must always pass a ref,
469                             # e.g. p(\@foo)
470

BACKWARDS INCOMPATIBLE CHANGES

472       While we make a genuine effort not to break anything on new releases,
473       sometimes we do. To make things easier for people migrating their code,
474       we have aggregated here a list of all incompatible changes since ever:
475
476       •   1.00 - some defaults changed!  Because we added a bunch of new
477           features (including color themes), you may notice some difference
478           on the default output of Data::Printer. Hopefully it's for the
479           best.
480
481       •   1.00 - new ".dataprinter" file format.  This should only affect you
482           if you have a ".dataprinter" file.  The change was required to
483           avoid calling "eval" on potentially tainted/unknown code. It also
484           provided a much cleaner interface.
485
486       •   1.00 - new way of creating external filters.  This only affects you
487           if you write or use external filters.  Previously, the sub in your
488           "filters" call would get the reference to be parsed and a
489           properties hash. The properties hash has been replaced with a
490           Data::Printer::Object instance, providing much more power and
491           flexibility.  Because of that, the filter call does not export
492           p()/np() anymore, replaced by methods in Data::Printer::Object.
493
494       •   1.00 - new way to call filters.  This affects you if you load your
495           own inline filters.  The fix is quick and Data::Printer will
496           generate a warning explaining how to do it. Basically, "filters =>
497           { ... }" became "filters => [{ ... }]" and you must replace
498           "-external => [1,2]" with "filters => [1, 2]", or "filters => [1,
499           2, {...}]" if you also have inline filters. This allowed us much
500           more power and flexibility with filters, and hopefully also makes
501           things clearer.
502
503       •   0.36 - p()'s default return value changed from 'dump' to 'pass'.
504           This was a very important change to ensure chained calls and to
505           prevent weird side-effects when p() is the last statement in a sub.
506           Read the full discussion <https://github.com/garu/Data-
507           Printer/issues/16>.
508
509       Any undocumented change was probably unintended. If you bump into one,
510       please file an issue on Github!
511

TIPS & TRICKS

513   Using p() in some/all of your loaded modules
514       (contributed by Matt S. Trout (mst))
515
516       While debugging your software, you may want to use Data::Printer in
517       some or all loaded modules and not bother having to load it in each and
518       every one of them. To do this, in any module loaded by "myapp.pl",
519       simply write:
520
521         ::p @myvar;  # note the '::' in front of p()
522
523       Then call your program like:
524
525         perl -MDDP myapp.pl
526
527       This also has the advantage that if you leave one p() call in by
528       accident, it will trigger a compile-time failure without the -M, making
529       it easier to spot :)
530
531       If you really want to have p() imported into your loaded modules, use
532       the next tip instead.
533
534   Adding p() to all your loaded modules
535       (contributed by Árpád Szász)
536
537       If you wish to automatically add Data::Printer's p() function to every
538       loaded module in you app, you can do something like this to your main
539       program:
540
541           BEGIN {
542               {
543                   no strict 'refs';
544                   require Data::Printer;
545                   my $alias = 'p';
546                   foreach my $package ( keys %main:: ) {
547                       if ( $package =~ m/::$/ ) {
548                           *{ $package . $alias } = \&Data::Printer::p;
549                       }
550                   }
551               }
552           }
553
554       WARNING This will override all locally defined subroutines/methods that
555       are named "p", if they exist, in every loaded module. If you already
556       have a subroutine named 'p()', be sure to change $alias to something
557       custom.
558
559       If you rather avoid namespace manipulation altogether, use the previous
560       tip instead.
561
562   Using Data::Printer from the Perl debugger
563       (contributed by Árpád Szász and Marcel Grünauer (hanekomu))
564
565       With DB::Pluggable, you can easily set the perl debugger to use
566       Data::Printer to print variable information, replacing the debugger's
567       standard p() function. All you have to do is add these lines to your
568       ".perldb" file:
569
570         use DB::Pluggable;
571         DB::Pluggable->run_with_config( \'[DataPrinter]' );  # note the '\'
572
573       Then call the perl debugger as you normally would:
574
575         perl -d myapp.pl
576
577       Now Data::Printer's p() command will be used instead of the debugger's!
578
579       See perldebug for more information on how to use the perl debugger, and
580       DB::Pluggable for extra functionality and other plugins.
581
582       If you can't or don't want to use DB::Pluggable, or simply want to keep
583       the debugger's p() function and add an extended version using
584       Data::Printer (let's call it px() for instance), you can add these
585       lines to your ".perldb" file instead:
586
587           $DB::alias{px} = 's/px/DB::px/';
588           sub px {
589               my $expr = shift;
590               require Data::Printer;
591               print Data::Printer::p($expr);
592           }
593
594       Now, inside the Perl debugger, you can pass as reference to "px"
595       expressions to be dumped using Data::Printer.
596
597   Using Data::Printer in a perl shell (REPL)
598       Some people really enjoy using a REPL shell to quickly try Perl code.
599       One of the most popular ones out there are Reply and Devel::REPL. If
600       you use them, now you can also see its output with Data::Printer!
601
602Reply
603
604       Just install Reply::Plugin::DataPrinter and add a line with
605       "[DataPrinter]" to your ".replyrc" file. That's it! Next time you run
606       the 'reply' REPL, Data::Printer will be used to dump variables!
607
608Devel::REPL
609
610       Just install Devel::REPL::Plugin::DataPrinter and add the following
611       line to your re.pl configuration file (usually ".re.pl/repl.rc" in your
612       home dir):
613
614         load_plugin('DataPrinter');
615
616       The next time you run "re.pl", it should dump all your REPL using
617       Data::Printer!
618
619   Easily rendering Data::Printer's output as HTML
620       To turn Data::Printer's output into HTML, you can do something like:
621
622         use HTML::FromANSI;
623         use Data::Printer;
624
625         my $html_output = ansi2html( np($object, colored => 1) );
626
627       In the example above, the $html_output variable contains the HTML
628       escaped output of p($object), so you can print it for later inspection
629       or render it (if it's a web app).
630
631   Using Data::Printer with Template Toolkit
632       (contributed by Stephen Thirlwall (sdt))
633
634       If you use Template Toolkit and want to dump your variables using
635       Data::Printer, install the Template::Plugin::DataPrinter module and
636       load it in your template:
637
638          [% USE DataPrinter %]
639
640       The provided methods match those of "Template::Plugin::Dumper":
641
642          ansi-colored dump of the data structure in "myvar":
643          [% DataPrinter.dump( myvar ) %]
644
645          html-formatted, colored dump of the same data structure:
646          [% DataPrinter.dump_html( myvar ) %]
647
648       The module allows several customization options, even letting you load
649       it as a complete drop-in replacement for Template::Plugin::Dumper so
650       you don't even have to change your previous templates!
651
652   Migrating from Data::Dumper to Data::Printer
653       If you are porting your code to use Data::Printer instead of
654       Data::Dumper, you could replace:
655
656         use Data::Dumper;
657
658       with something like:
659
660         use Data::Printer;
661         sub Dumper { np @_, colored => 1 }
662
663       this sub will accept multiple variables just like Data::Dumper.
664
665   Unified interface for Data::Printer and other debug formatters
666       (contributed by Kevin McGrath (catlgrep))
667
668       If you want a really unified approach to easily flip between debugging
669       outputs, use Any::Renderer and its plugins, like
670       Any::Renderer::Data::Printer.
671
672   Printing stack traces with arguments expanded using Data::Printer
673       (contributed by Sergey Aleynikov (randir))
674
675       There are times where viewing the current state of a variable is not
676       enough, and you want/need to see a full stack trace of a function call.
677
678       The Devel::PrettyTrace module uses Data::Printer to provide you just
679       that. It exports a bt() function that pretty-prints detailed
680       information on each function in your stack, making it easier to spot
681       any issues!
682
683   Troubleshooting apps in real time without changing a single line of your
684       code
685       (contributed by Marcel Grünauer (hanekomu))
686
687       dip is a dynamic instrumentation framework for troubleshooting Perl
688       programs, similar to DTrace
689       <http://opensolaris.org/os/community/dtrace/>.  In a nutshell, "dip"
690       lets you create probes for certain conditions in your application that,
691       once met, will perform a specific action. Since it uses Aspect-oriented
692       programming, it's very lightweight and you only pay for what you use.
693
694       "dip" can be very useful since it allows you to debug your software
695       without changing a single line of your original code. And Data::Printer
696       comes bundled with it, so you can use the p() function to view your
697       data structures too!
698
699          # Print a stack trace every time the name is changed,
700          # except when reading from the database.
701          dip -e 'before { print longmess(np $_->{args}[1], colored => 1)
702          if $_->{args}[1] } call "MyObj::name" & !cflow("MyObj::read")' myapp.pl
703
704       You can check dip's own documentation for more information and options.
705
706   Sample output for color fine-tuning
707       (contributed by Yanick Champoux (yanick))
708
709       The "examples/try_me.pl" file included in this distribution has a
710       sample dump with a complex data structure to let you quickly test color
711       schemes.
712

VERSIONING AND UPDATES

714       As of 1.0.0 this module complies with "Major.Minor.Revision" versioning
715       scheme (SemVer), meaning backwards incompatible changes will trigger a
716       new major number, new features without any breaking changes trigger a
717       new minor number, and simple patches trigger a revision number.
718

CONTRIBUTORS

720       Many thanks to everyone who helped design and develop this module with
721       patches, bug reports, wishlists, comments and tests. They are
722       (alphabetically):
723
724       Adam Rosenstein, Alexandr Ciornii (chorny), Alexander Hartmaier
725       (abraxxa), Allan Whiteford, Anatoly (Snelius30), Andreas König (andk),
726       Andy Bach, Anthony DeRobertis, Árpád Szász, Athanasios Douitsis
727       (aduitsis), Baldur Kristinsson, Benct Philip Jonsson (bpj), brian d
728       foy, Chad Granum (exodist), Chris Prather (perigrin), Curtis Poe
729       (Ovid), David D Lowe (Flimm), David E. Condon (hhg7), David Golden
730       (xdg), David Precious (bigpresh), David Raab, David E. Wheeler
731       (theory), Damien Krotkine (dams), Denis Howe, dirk, Dotan Dimet, Eden
732       Cardim (edenc), Elliot Shank (elliotjs), Elvin Aslanov, Eugen Konkov
733       (KES777), Fernando Corrêa (SmokeMachine), Fitz Elliott, Florian
734       (fschlich), Frew Schmidt (frew), GianniGi, Graham Knop (haarg), Graham
735       Todd, Gregory J. Oschwald, grr, Håkon Hægland, Iaroslav O. Kosmina
736       (darviarush), Ivan Bessarabov (bessarabv), J Mash, James E. Keenan
737       (jkeenan), Jarrod Funnell (Timbus), Jay Allen (jayallen), Jay Hannah
738       (jhannah), jcop, Jesse Luehrs (doy), Joel Berger (jberger), John S.
739       Anderson (genehack), Karen Etheridge (ether), Kartik Thakore
740       (kthakore), Kevin Dawson (bowtie), Kevin McGrath (catlgrep), Kip
741       Hampton (ubu), Londran, Marcel Grünauer (hanekomu), Marco Masetti
742       (grubert65), Mark Fowler (Trelane), Martin J. Evans, Matthias Muth,
743       Matt S. Trout (mst), Maxim Vuets, Michael Conrad, Mike Doherty
744       (doherty), Nicolas R (atoomic), Nigel Metheringham (nigelm), Nuba
745       Princigalli (nuba), Olaf Alders (oalders), Paul Evans (LeoNerd), Pedro
746       Melo (melo), Philippe Bruhat (BooK), Przemysław Wesołek (jest), Rebecca
747       Turner (iarna), Renato Cron (renatoCRON), Ricardo Signes (rjbs), Rob
748       Hoelz (hoelzro), Salve J. Nilsen (sjn), sawyer, Sebastian Willing
749       (Sewi), Sébastien Feugère (smonff), Sergey Aleynikov (randir), Slaven
750       Rezić, Stanislaw Pusep (syp), Stephen Thirlwall (sdt), sugyan, Tai
751       Paul, Tatsuhiko Miyagawa (miyagawa), Thomas Sibley (tsibley), Tim
752       Heaney (oylenshpeegul), Toby Inkster (tobyink), Torsten Raudssus
753       (Getty), Tokuhiro Matsuno (tokuhirom), trapd00r, Tsai Chung-Kuan, Veesh
754       Goldman (rabbiveesh), vividsnow, Wesley Dal`Col (blabos), y, Yanick
755       Champoux (yanick).
756
757       If I missed your name, please drop me a line!
758
760       Copyright (C) 2011-2023 Breno G. de Oliveira
761
762       This program is free software; you can redistribute it and/or modify it
763       under the terms of either: the GNU General Public License as published
764       by the Free Software Foundation; or the Artistic License.
765
766       See <http://dev.perl.org/licenses/> for more information.
767

DISCLAIMER OF WARRANTY

769       BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
770       FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
771       WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
772       PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND,
773       EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
774       WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
775       ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
776       YOU.  SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
777       NECESSARY SERVICING, REPAIR, OR CORRECTION.
778
779       IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
780       WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
781       REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE
782       TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR
783       CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
784       SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
785       RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
786       FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
787       SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
788       DAMAGES.
789
790
791
792perl v5.38.0                      2023-07-31                  Data::Printer(3)
Impressum