1Data::Printer(3) User Contributed Perl Documentation Data::Printer(3)
2
3
4
6 Data::Printer - colored & full-featured pretty print of Perl data
7 structures and objects
8
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
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
59 • Highly customizable, from indentation size to depth level. You can
60 even rename the exported p() function!
61
62 • Beautiful (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
67 • Filters 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
81 • keep your custom settings on a .dataprinter file that allows
82 different options per module being analyzed! You may also create a
83 custom profile class with your preferences and filters and upload
84 it to CPAN.
85
86 • output to many different targets like files, variables or open
87 handles (defaults to STDERR). You can send your dumps to the screen
88 or anywhere else, and customize this setting on a per-project or
89 even per-module basis, like print everything from Some::Module to a
90 debug.log file with extra info, and everything else to STDERR.
91
92 • Easy to learn, easy to master. Seriously, the synopsis above and
93 the customization section below cover about 90% of all use cases.
94
95 • Works on Perl 5.8 and later. Because you can't control where you
96 debug, we try our best to be compatible with all versions of Perl
97 5.
98
99 • Best of all? All that with No non-core dependencies, Zero. Nada. So
100 don't worry about adding extra weight to your project, as
101 Data::Printer can be easily added/removed.
102
104 The ever-popular Data::Dumper is a fantastic tool, meant to stringify
105 data structures in a way they are suitable for being "eval"'ed back in.
106 The thing is, a lot of people keep using it (and similar ones, like
107 Data::Dump) to print data structures and objects on screen for
108 inspection and debugging, and while you can use those modules for that,
109 it doesn't mean you should.
110
111 This is where Data::Printer comes in. It is meant to do one thing and
112 one thing only:
113
114 format Perl variables and objects to be inspected by a human
115
116 If you want to serialize/store/restore Perl data structures, this
117 module will NOT help you. Try Storable, Data::Dumper, JSON, or
118 whatever. CPAN is full of such solutions!
119
120 Whenever you type "use Data::Printer" or "use DDP", we export two
121 functions to your namespace:
122
123 p()
124 This function pretty-prints the contents of whatever variable to STDERR
125 (by default), and will use colors by default if your terminal supports
126 it.
127
128 p @some_array;
129 p %some_hash;
130 p $scalar_or_ref;
131
132 Note that anonymous structures will only work if you postderef them:
133
134 p [$foo, $bar, $baz]->@*;
135
136 you may also deref it manually:
137
138 p %{{ foo => $foo }};
139
140 or prefix p() with "&":
141
142 &p( [$foo, $bar, $baz] ); # & (note mandatory parenthesis)
143
144 You can pass custom options that will work only on that particular
145 call:
146
147 p @var, as => "some label", colorized => 0;
148 p %var, show_memsize => 1;
149
150 By default, p() prints to STDERR and returns the same variable being
151 dumped. This lets you quickly wrap variables with p() without worrying
152 about changing return values. It means that if you change this:
153
154 sub foo { my $x = shift + 13; $x }
155
156 to this:
157
158 sub foo { my $x = shift + 13; p($x) }
159
160 The function will still return $x after printing the contents. This
161 form of handling data even allows method chaining, so if you want to
162 inspect what's going on in the middle of this:
163
164 $object->foo->bar->baz;
165
166 You can just add "DDP::p" anywhere:
167
168 $object->foo->DDP::p->bar->baz; # what happens to $object after ->foo?
169
170 Check out the customization quick reference section below for all
171 available options, including changing the return type, output target
172 and a lot more.
173
174 np()
175 The np() function behaves exactly like p() except it always returns the
176 string containing the dump (thus ignoring any setting regarding dump
177 mode or destination), and contains no colors by default. In fact, the
178 only way to force a colored np() is to pass "colored => 1" as an
179 argument to each call. It is meant to provide an easy way to fetch the
180 dump and send it to some unsupported target, or appended to some other
181 text (like part of a log message).
182
184 There are 3 possible ways to customize Data::Printer:
185
186 1. [RECOMMENDED] Creating a ".dataprinter" file either on your home
187 directory or your project's base directory, or both, or wherever you
188 set the "DATAPRINTERRC" environment variable to.
189
190 2. Setting custom properties on module load. This will override any
191 setting from your config file on the namespace (package/module) it was
192 called:
193
194 use DDP max_depth => 2, deparse => 1;
195
196 3. Setting custom properties on the actual call to p() or np(). This
197 overrides all other settings:
198
199 p $var, show_tainted => 1, indent => 2;
200
201 The .dataprinter configuration file
202 The most powerful way to customize Data::Printer is to have a
203 ".dataprinter" file in your home directory or your project's root
204 directory. The format is super simple and can be understood in the
205 example below:
206
207 # global settings (note that only full line comments are accepted)
208 max_depth = 1
209 theme = Monokai
210 class.stringify = 0
211
212 # use quotes if you want spaces to be significant:
213 hash_separator = " => "
214
215 # You can set rules that apply only to a specific
216 # caller module (in this case, MyApp::Some::Module):
217 [MyApp::Some::Module]
218 max_depth = 2
219 class.expand = 0
220 escape_chars = nonlatin1
221
222 [MyApp::Other::Module]
223 multiline = 0
224 output = /var/log/myapp/debug.data
225
226 # use 'quiet' to silence all output from p() and np()
227 # called from the specified package.
228 [MyApp::Yet::Another]
229 quiet = 1
230
231 Note that if you set custom properties as arguments to p() or np(), you
232 should group suboptions as a hashref. So while the ".dataprinter" file
233 has ""class.expand = 0"" and ""class.inherited = none"", the equivalent
234 code is ""class => { expand => 0, inherited => 'none' }"".
235
236 live updating your .dataprinter without restarts
237
238 Data::Printer 1.1 introduces a new 'live_update' flag that can be set
239 to a positive integer to enable live updates. When this mode is on,
240 Data::Printer will check if the ".dataprinter" file has been updated
241 and, if so, it will reload it. This way you can toggle features on and
242 off and control output verbosity directly from your ".dataprinter" file
243 without needing to change or restart running code.
244
245 Properties Quick Reference
246 Below are (almost) all available properties and their (hopefully sane)
247 default values. See Data::Printer::Object for further information on
248 each of them:
249
250 # scalar options
251 show_tainted = 1
252 show_unicode = 1
253 show_lvalue = 1
254 print_escapes = 0
255 scalar_quotes = "
256 escape_chars = none
257 string_max = 4096
258 string_preserve = begin
259 string_overflow = '(...skipping __SKIPPED__ chars...)'
260 unicode_charnames = 0
261
262 # array options
263 array_max = 100
264 array_preserve = begin
265 array_overflow = '(...skipping __SKIPPED__ items...)'
266 index = 1
267
268 # hash options
269 hash_max = 100
270 hash_preserve = begin
271 hash_overflow = '(...skipping __SKIPPED__ keys...)'
272 hash_separator = ' '
273 align_hash = 1
274 sort_keys = 1
275 quote_keys = auto
276
277 # general options
278 name = var
279 return_value = pass
280 output = stderr
281 use_prototypes = 1
282 indent = 4
283 show_readonly = 1
284 show_tied = 1
285 show_dualvar = lax
286 show_weak = 1
287 show_refcount = 0
288 show_memsize = 0
289 memsize_unit = auto
290 separator = ,
291 end_separator = 0
292 caller_info = 0
293 caller_message = 'Printing in line __LINE__ of __FILENAME__'
294 max_depth = 0
295 deparse = 0
296 alias = p
297 warnings = 1
298
299 # colorization (see Colors & Themes below)
300 colored = auto
301 theme = Material
302
303 # object output
304 class_method = _data_printer
305 class.parents = 1
306 class.linear_isa = auto
307 class.universal = 1
308 class.expand = 1
309 class.stringify = 1
310 class.show_reftype = 0
311 class.show_overloads = 1
312 class.show_methods = all
313 class.sort_methods = 1
314 class.inherited = none
315 class.format_inheritance = string
316 class.parent_filters = 1
317 class.internals = 1
318
319 Settings' shortcuts
320
321 • as - prints a string before the dump. So:
322
323 p $some_var, as => 'here!';
324
325 is a shortcut to:
326
327 p $some_var, caller_info => 1, caller_message => 'here!';
328
329 • multiline - lets you create shorter dumps. By setting it to 0, we
330 use a single space as linebreak and disable the array index.
331 Setting it to 1 (the default) goes back to using "\n" as linebreak
332 and restore whatever array index you had originally.
333
334 • fulldump - when set to 1, disables all max string/hash/array
335 values. Use this to generate complete (full) dumps of all your
336 content, which is trimmed by default.
337
338 • quiet - when set to 1, disables all data parsing and returns as
339 quickly as possible. Use this to disable all output from p() and
340 np() inside a particular package, either from the 'use' call or
341 from .dataprinter. (introduced in version 1.1)
342
343 Colors & Themes
344 Data::Printer lets you set custom colors for pretty much every part of
345 the content being printed. For example, if you want numbers to be shown
346 in bright green, just put "colors.number = #00ff00" on your
347 configuration file.
348
349 See Data::Printer::Theme for the full list of labels, ways to represent
350 and customize colors, and even how to group them in your own custom
351 theme.
352
353 The colorization is set by the "colored" property. It can be set to 0
354 (never colorize), 1 (always colorize) or 'auto' (the default), which
355 will colorize p() only when there is no "ANSI_COLORS_DISABLED"
356 environment variable, the output is going to the terminal (STDOUT or
357 STDERR) and your terminal actually supports colors.
358
359 Profiles
360 You may bundle your settings and filters into a profile module. It
361 works like a configuration file but gives you the power and flexibility
362 to use Perl code to find out what to print and how to print. It also
363 lets you use CPAN to store your preferred settings and install them
364 into your projects just like a regular dependency.
365
366 use DDP profile => 'ProfileName';
367
368 See Data::Printer::Profile for all the ways to load a profile, a list
369 of available profiles and how to make one yourself.
370
371 Filters
372 Data::Printer works by passing your variable to a different set of
373 filters, depending on whether it's a scalar, a hash, an array, an
374 object, etc. It comes bundled with filters for all native data types
375 (always enabled, but overwritable), including a generic object filter
376 that pretty-prints regular and Moo(se) objects and is even aware of
377 Role::Tiny.
378
379 Data::Printer also comes with filter bundles that can be quickly
380 activated to make it easier to debug binary data and many popular CPAN
381 modules that handle date and time, databases (yes, even DBIx::Class),
382 message digests like MD5 and SHA1, and JSON and Web content like HTTP
383 requests and responses.
384
385 So much so we recommend everyone to activate all bundled filters by
386 putting the following line on your ".dataprinter" file:
387
388 filters = ContentType, DateTime, DB, Digest, Web
389
390 Creating your custom filters is very easy, and you're encouraged to
391 upload them to CPAN. There are many options available under the
392 "Data::Printer::Filter::*" namespace. Check Data::Printer::Filter for
393 more information!
394
395 Making your classes DDP-aware (without adding any dependencies!)
396 The default object filter will first check if the class implements a
397 sub called '_data_printer()' (or whatever you set the "class_method"
398 option to in your settings). If so, Data::Printer will use it to get
399 the string to print instead of making a regular class dump.
400
401 This means you could have the following in one of your classes:
402
403 sub _data_printer {
404 my ($self, $ddp) = @_;
405 return 'Hey, no peeking! But foo contains ' . $self->foo;
406 }
407
408 Notice that you can do this without adding Data::Printer as a
409 dependency to your project! Just write your sub and it will be called
410 with the object to be printed and a $ddp object ready for you. See
411 Data::Printer::Object for how to use it to pretty-print your data.
412
413 Finally, if your object implements string overload or provides a method
414 called "to_string", "as_string" or "stringify", Data::Printer will use
415 it. To disable this behaviour, set "class.stringify = 0" on your
416 ".dataprinter" file, or call p() with "class => { stringify => 0 }".
417
418 Loading a filter for that particular class will of course override
419 these settings.
420
422 You can't pass more than one variable at a time.
423
424 p $foo, $bar; # wrong
425 p $foo; p $bar; # right
426
427 You can't use it in variable declarations (it will most likely not do
428 what you want):
429
430 p my @array = qw(a b c d); # wrong
431 my @array = qw(a b c d); p @array; # right
432
433 If you pass a nonexistant key/index to DDP using prototypes, they will
434 trigger autovivification:
435
436 use DDP;
437 my %foo;
438 p $foo{bar}; # undef, but will create the 'bar' key (with undef)
439
440 my @x;
441 p $x[5]; # undef, but will initialize the array with 5 elements (all undef)
442
443 Slices (both array and hash) must be coerced into actual arrays (or
444 hashes) to properly shown. So if you want to print a slice, instead of
445 doing something like this:
446
447 p @somevar[1..10]; # WRONG! DON'T DO THIS!
448
449 try one of those:
450
451 my @x = @somevar[1..10]; p @x; # works!
452 p [ @somevar[1..0] ]->@*; # also works!
453 p @{[@somevar[1..0]]}; # this works too!!
454
455 Finally, as mentioned before, you cannot pass anonymous references on
456 the default mode of "use_prototypes = 1":
457
458 p { foo => 1 }; # wrong!
459 p %{{ foo => 1 }}; # right
460 p { foo => 1 }->%*; # right on perl 5.24+
461 &p( { foo => 1 } ); # right, but requires the parenthesis
462 sub pp { p @_ }; # wrapping it also lets you use anonymous data.
463
464 use DDP use_prototypes => 0;
465 p { foo => 1 }; # works, but now p(@foo) will fail, you must always pass a ref,
466 # e.g. p(\@foo)
467
469 While we make a genuine effort not to break anything on new releases,
470 sometimes we do. To make things easier for people migrating their code,
471 we have aggregated here a list of all incompatible changes since ever:
472
473 • 1.00 - some defaults changed! Because we added a bunch of new
474 features (including color themes), you may notice some difference
475 on the default output of Data::Printer. Hopefully it's for the
476 best.
477
478 • 1.00 - new ".dataprinter" file format. This should only affect you
479 if you have a ".dataprinter" file. The change was required to
480 avoid calling "eval" on potentially tainted/unknown code. It also
481 provided a much cleaner interface.
482
483 • 1.00 - new way of creating external filters. This only affects you
484 if you write or use external filters. Previously, the sub in your
485 "filters" call would get the reference to be parsed and a
486 properties hash. The properties hash has been replaced with a
487 Data::Printer::Object instance, providing much more power and
488 flexibility. Because of that, the filter call does not export
489 p()/np() anymore, replaced by methods in Data::Printer::Object.
490
491 • 1.00 - new way to call filters. This affects you if you load your
492 own inline filters. The fix is quick and Data::Printer will
493 generate a warning explaining how to do it. Basically, "filters =>
494 { ... }" became "filters => [{ ... }]" and you must replace
495 "-external => [1,2]" with "filters => [1, 2]", or "filters => [1,
496 2, {...}]" if you also have inline filters. This allowed us much
497 more power and flexibility with filters, and hopefully also makes
498 things clearer.
499
500 • 0.36 - p()'s default return value changed from 'dump' to 'pass'.
501 This was a very important change to ensure chained calls and to
502 prevent weird side-effects when p() is the last statement in a sub.
503 Read the full discussion <https://github.com/garu/Data-
504 Printer/issues/16>.
505
506 Any undocumented change was probably unintended. If you bump into one,
507 please file an issue on Github!
508
510 Using p() in some/all of your loaded modules
511 (contributed by Matt S. Trout (mst))
512
513 While debugging your software, you may want to use Data::Printer in
514 some or all loaded modules and not bother having to load it in each and
515 every one of them. To do this, in any module loaded by "myapp.pl",
516 simply write:
517
518 ::p @myvar; # note the '::' in front of p()
519
520 Then call your program like:
521
522 perl -MDDP myapp.pl
523
524 This also has the advantage that if you leave one p() call in by
525 accident, it will trigger a compile-time failure without the -M, making
526 it easier to spot :)
527
528 If you really want to have p() imported into your loaded modules, use
529 the next tip instead.
530
531 Adding p() to all your loaded modules
532 (contributed by Árpád Szász)
533
534 If you wish to automatically add Data::Printer's p() function to every
535 loaded module in you app, you can do something like this to your main
536 program:
537
538 BEGIN {
539 {
540 no strict 'refs';
541 require Data::Printer;
542 my $alias = 'p';
543 foreach my $package ( keys %main:: ) {
544 if ( $package =~ m/::$/ ) {
545 *{ $package . $alias } = \&Data::Printer::p;
546 }
547 }
548 }
549 }
550
551 WARNING This will override all locally defined subroutines/methods that
552 are named "p", if they exist, in every loaded module. If you already
553 have a subroutine named 'p()', be sure to change $alias to something
554 custom.
555
556 If you rather avoid namespace manipulation altogether, use the previous
557 tip instead.
558
559 Using Data::Printer from the Perl debugger
560 (contributed by Árpád Szász and Marcel Grünauer (hanekomu))
561
562 With DB::Pluggable, you can easily set the perl debugger to use
563 Data::Printer to print variable information, replacing the debugger's
564 standard p() function. All you have to do is add these lines to your
565 ".perldb" file:
566
567 use DB::Pluggable;
568 DB::Pluggable->run_with_config( \'[DataPrinter]' ); # note the '\'
569
570 Then call the perl debugger as you normally would:
571
572 perl -d myapp.pl
573
574 Now Data::Printer's p() command will be used instead of the debugger's!
575
576 See perldebug for more information on how to use the perl debugger, and
577 DB::Pluggable for extra functionality and other plugins.
578
579 If you can't or don't want to use DB::Pluggable, or simply want to keep
580 the debugger's p() function and add an extended version using
581 Data::Printer (let's call it px() for instance), you can add these
582 lines to your ".perldb" file instead:
583
584 $DB::alias{px} = 's/px/DB::px/';
585 sub px {
586 my $expr = shift;
587 require Data::Printer;
588 print Data::Printer::p($expr);
589 }
590
591 Now, inside the Perl debugger, you can pass as reference to "px"
592 expressions to be dumped using Data::Printer.
593
594 Using Data::Printer in a perl shell (REPL)
595 Some people really enjoy using a REPL shell to quickly try Perl code.
596 One of the most popular ones out there is Devel::REPL. If you use it,
597 now you can also see its output with Data::Printer!
598
599 Just install Devel::REPL::Plugin::DataPrinter and add the following
600 line to your re.pl configuration file (usually ".re.pl/repl.rc" in your
601 home dir):
602
603 load_plugin('DataPrinter');
604
605 The next time you run "re.pl", it should dump all your REPL using
606 Data::Printer!
607
608 Easily rendering Data::Printer's output as HTML
609 To turn Data::Printer's output into HTML, you can do something like:
610
611 use HTML::FromANSI;
612 use Data::Printer;
613
614 my $html_output = ansi2html( np($object, colored => 1) );
615
616 In the example above, the $html_output variable contains the HTML
617 escaped output of p($object), so you can print it for later inspection
618 or render it (if it's a web app).
619
620 Using Data::Printer with Template Toolkit
621 (contributed by Stephen Thirlwall (sdt))
622
623 If you use Template Toolkit and want to dump your variables using
624 Data::Printer, install the Template::Plugin::DataPrinter module and
625 load it in your template:
626
627 [% USE DataPrinter %]
628
629 The provided methods match those of "Template::Plugin::Dumper":
630
631 ansi-colored dump of the data structure in "myvar":
632 [% DataPrinter.dump( myvar ) %]
633
634 html-formatted, colored dump of the same data structure:
635 [% DataPrinter.dump_html( myvar ) %]
636
637 The module allows several customization options, even letting you load
638 it as a complete drop-in replacement for Template::Plugin::Dumper so
639 you don't even have to change your previous templates!
640
641 Migrating from Data::Dumper to Data::Printer
642 If you are porting your code to use Data::Printer instead of
643 Data::Dumper, you could replace:
644
645 use Data::Dumper;
646
647 with something like:
648
649 use Data::Printer;
650 sub Dumper { np @_, colored => 1 }
651
652 this sub will accept multiple variables just like Data::Dumper.
653
654 Unified interface for Data::Printer and other debug formatters
655 (contributed by Kevin McGrath (catlgrep))
656
657 If you want a really unified approach to easily flip between debugging
658 outputs, use Any::Renderer and its plugins, like
659 Any::Renderer::Data::Printer.
660
661 Printing stack traces with arguments expanded using Data::Printer
662 (contributed by Sergey Aleynikov (randir))
663
664 There are times where viewing the current state of a variable is not
665 enough, and you want/need to see a full stack trace of a function call.
666
667 The Devel::PrettyTrace module uses Data::Printer to provide you just
668 that. It exports a bt() function that pretty-prints detailed
669 information on each function in your stack, making it easier to spot
670 any issues!
671
672 Troubleshooting apps in real time without changing a single line of your
673 code
674 (contributed by Marcel Grünauer (hanekomu))
675
676 dip is a dynamic instrumentation framework for troubleshooting Perl
677 programs, similar to DTrace
678 <http://opensolaris.org/os/community/dtrace/>. In a nutshell, "dip"
679 lets you create probes for certain conditions in your application that,
680 once met, will perform a specific action. Since it uses Aspect-oriented
681 programming, it's very lightweight and you only pay for what you use.
682
683 "dip" can be very useful since it allows you to debug your software
684 without changing a single line of your original code. And Data::Printer
685 comes bundled with it, so you can use the p() function to view your
686 data structures too!
687
688 # Print a stack trace every time the name is changed,
689 # except when reading from the database.
690 dip -e 'before { print longmess(np $_->{args}[1], colored => 1)
691 if $_->{args}[1] } call "MyObj::name" & !cflow("MyObj::read")' myapp.pl
692
693 You can check dip's own documentation for more information and options.
694
695 Sample output for color fine-tuning
696 (contributed by Yanick Champoux (yanick))
697
698 The "examples/try_me.pl" file included in this distribution has a
699 sample dump with a complex data structure to let you quickly test color
700 schemes.
701
703 As of 1.0.0 this module complies with "Major.Minor.Revision" versioning
704 scheme (SemVer), meaning backwards incompatible changes will trigger a
705 new major number, new features without any breaking changes trigger a
706 new minor number, and simple patches trigger a revision number.
707
709 Many thanks to everyone who helped design and develop this module with
710 patches, bug reports, wishlists, comments and tests. They are
711 (alphabetically):
712
713 Adam Rosenstein, Alexandr Ciornii (chorny), Alexander Hartmaier
714 (abraxxa), Allan Whiteford, Anatoly (Snelius30), Andreas König (andk),
715 Andy Bach, Anthony DeRobertis, Árpád Szász, Athanasios Douitsis
716 (aduitsis), Baldur Kristinsson, Benct Philip Jonsson (bpj), brian d
717 foy, Chad Granum (exodist), Chris Prather (perigrin), Curtis Poe
718 (Ovid), David D Lowe (Flimm), David E. Condon (hhg7), David Golden
719 (xdg), David Precious (bigpresh), David Raab, David E. Wheeler
720 (theory), Damien Krotkine (dams), Denis Howe, dirk, Dotan Dimet, Eden
721 Cardim (edenc), Elliot Shank (elliotjs), Eugen Konkov (KES777),
722 Fernando Corrêa (SmokeMachine), Fitz Elliott, Florian (fschlich), Frew
723 Schmidt (frew), GianniGi, Graham Knop (haarg), Graham Todd, Gregory J.
724 Oschwald, grr, Håkon Hægland, Iaroslav O. Kosmina (darviarush), Ivan
725 Bessarabov (bessarabv), J Mash, James E. Keenan (jkeenan), Jarrod
726 Funnell (Timbus), Jay Allen (jayallen), Jay Hannah (jhannah), jcop,
727 Jesse Luehrs (doy), Joel Berger (jberger), John S. Anderson (genehack),
728 Karen Etheridge (ether), Kartik Thakore (kthakore), Kevin Dawson
729 (bowtie), Kevin McGrath (catlgrep), Kip Hampton (ubu), Londran, Marcel
730 Grünauer (hanekomu), Marco Masetti (grubert65), Mark Fowler (Trelane),
731 Martin J. Evans, Matt S. Trout (mst), Maxim Vuets, Michael Conrad, Mike
732 Doherty (doherty), Nicolas R (atoomic), Nigel Metheringham (nigelm),
733 Nuba Princigalli (nuba), Olaf Alders (oalders), Paul Evans (LeoNerd),
734 Pedro Melo (melo), Philippe Bruhat (BooK), Przemysław Wesołek (jest),
735 Rebecca Turner (iarna), Renato Cron (renatoCRON), Ricardo Signes
736 (rjbs), Rob Hoelz (hoelzro), Salve J. Nilsen (sjn), sawyer, Sebastian
737 Willing (Sewi), Sébastien Feugère (smonff), Sergey Aleynikov (randir),
738 Slaven Rezić, Stanislaw Pusep (syp), Stephen Thirlwall (sdt), sugyan,
739 Tai Paul, Tatsuhiko Miyagawa (miyagawa), Thomas Sibley (tsibley), Tim
740 Heaney (oylenshpeegul), Toby Inkster (tobyink), Torsten Raudssus
741 (Getty), Tokuhiro Matsuno (tokuhirom), trapd00r, Tsai Chung-Kuan, Veesh
742 Goldman (rabbiveesh), vividsnow, Wesley Dal`Col (blabos), y, Yanick
743 Champoux (yanick).
744
745 If I missed your name, please drop me a line!
746
748 Copyright (C) 2011-2021 Breno G. de Oliveira
749
750 This program is free software; you can redistribute it and/or modify it
751 under the terms of either: the GNU General Public License as published
752 by the Free Software Foundation; or the Artistic License.
753
754 See <http://dev.perl.org/licenses/> for more information.
755
757 BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
758 FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
759 WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
760 PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND,
761 EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
762 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
763 ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
764 YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
765 NECESSARY SERVICING, REPAIR, OR CORRECTION.
766
767 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
768 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
769 REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE
770 TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR
771 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
772 SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
773 RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
774 FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
775 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
776 DAMAGES.
777
778
779
780perl v5.36.0 2023-01-20 Data::Printer(3)