=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
