=pod
=for comment
DO NOT EDIT. This Pod was generated by Swim v0.1.48.
See http://github.com/ingydotnet/swim-pm#readme
=encoding utf8
=head1 NAME
XXX - See Your Data in the Nude
=head1 VERSION
This document describes L<XXX> version B<0.38>.
=for html
<a href="https://travis-ci.org/ingydotnet/xxx-pm"><img src="https://travis-ci.org/ingydotnet/xxx-pm.png" alt="xxx-pm"></a>
<a href="https://coveralls.io/r/ingydotnet/xxx-pm?branch=master"><img src="https://coveralls.io/repos/ingydotnet/xxx-pm/badge.png" alt="xxx-pm"></a>
=head1 SYNOPSIS
use XXX;
XXX my $dog = Dog->new({has => ['fleas', 'style']});
my $dog = XXX Dog->new({has => ['fleas', 'style']});
my $dog = Dog->new(XXX {has => ['fleas', 'style']});
my $dog = Dog->new({XXX has => ['fleas', 'style']});
my $dog = Dog->new({has => XXX ['fleas', 'style']});
my $dog = Dog->new({has => [XXX 'fleas', 'style']});
=head1 DESCRIPTION
C<XXX.pm> exports a function called C<XXX> that you can put just about
anywhere in your Perl code to make it die with a YAML dump of the
arguments to its right.
The charm of XXX-debugging is that it is easy to type, rarely requires parens
and stands out visually so that you remember to remove it.
C<XXX.pm> also exports C<WWW>, C<YYY> and C<ZZZ> which do similar
debugging things.
=head1 FUNCTIONS
=over
=item C<WWW>
C<WWW> will warn a dump of its arguments, and then return the original
arguments. This means you can stick it in the middle of expressions.
NOTE: If you use WWW with Test::More, it will C<diag()> rather than C<warn()>.
mnemonic: W for warn
=item C<XXX>
C<XXX> will die with a dump of its arguments.
mnemonic: XXX == Death, Nudity
=item C<YYY>
C<YYY> will print a dump of its arguments, and then return the original
arguments. This means you can stick it in the middle of expressions.
NOTE: If you use YYY with Test::More, it will C<note()> rather than
C<print()>.
mnemonic: YYY == Why Why Why??? or YAML YAML YAML
=item C<ZZZ>
C<ZZZ> will Carp::confess a dump of its arguments.
mnemonic: You should confess all your sins before you sleep. zzzzzzzz
=item C<DDD>
C<DDD> will start an interactive debugger session using the C<Enbugger>
module. By default it will use the Perl debugger, but you can switch to the
fancier Devel::Trepan debugger by setting the enviroment variable
C<PERL_XXX_DEBUGGER=trepan>.
In the debugger session you will be able to both read and modify all variables
including lexical variables.
mnemonic: Debug, Debug, Debug!
=back
=head1 USE XXX WITHOUT C<USE XXX;>
If you C<export PERL5OPT='-MXXX=global'> in your shell environment, then
C<XXX> will be always be loaded, and all the functions will also be exported
into the C<main> namespace. That means you can call C<XXX> from any package
with C<::XXX> (since C<::> is a synonym for C<main::>).
Also C<XXX> will be exported as C<$::XXX> which you can use like this:
$self->foo->$::WWW->bar;
This will warn a YAML dump of C<$self>, returning C<$self> so that C<bar> will
be called correctly.
=head1 CONFIGURATION
By default, C<XXX> uses YAML::PP to dump your data. You can change this like
so:
use XXX -with => 'Data::Dumper';
use XXX -with => 'Data::Dump';
use XXX -with => 'Data::Dump::Color';
use XXX -with => 'YAML';
use XXX -with => 'YAML::XS';
use XXX -with => 'YAML::SomeOtherYamlModule';
use XXX -with => 'JSON::Color';
use XXX -with => 'JSON::SomeOtherJsonModule';
You can also use the environment variable C<PERL_XXX_DUMPER> to set the
module, for example;
PERL_XXX_DUMPER=JSON::Color perl script.pl
PERL_XXX_DUMPER=YAML::PP::Highlight perl script.pl
Only modules with names beginning with 'YAML' or 'JSON', and the Data::Dumper,
Data::Dump, and Data::Dump::Color modules are supported.
If you need to load XXX with C<require>, you can set the dumper module with
the C<$XXX::DumpModule> global variable.
require XXX;
$XXX::DumpModule = 'YAML::Syck';
XXX::XXX($variable);
=head1 STACK TRACE LEVEL
If you call a debugging function that calls C<XXX> for you, C<XXX> will print
the wrong file and line number. To force C<XXX> to skip a package in the call
stack, just define the C<XXX_skip> constant like this:
package MyDebugger;
use constant XXX_skip => 1;
sub debug {
require XXX;
XXX::XXX(@_);
}
Now calls to MyDebugger::debug will print the file name you called it from,
not from MyDebugger itself.
=head1 AUTHOR
Ingy döt Net <ingy@cpan.org>
=head1 COPYRIGHT AND LICENSE
Copyright 2006-2021. Ingy döt Net.
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.
See L<http://www.perl.com/perl/misc/Artistic.html>
=cut