XXX - See Your Data in the Nude
This document describes XXX version 0.38.
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']});
XXX.pm
exports a function called 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.
XXX.pm
also exports WWW
, YYY
and ZZZ
which do similar debugging things.
WWW
-
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
diag()
rather thanwarn()
.mnemonic: W for warn
XXX
-
XXX
will die with a dump of its arguments.mnemonic: XXX == Death, Nudity
YYY
-
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
note()
rather thanprint()
.mnemonic: YYY == Why Why Why??? or YAML YAML YAML
ZZZ
-
ZZZ
will Carp::confess a dump of its arguments.mnemonic: You should confess all your sins before you sleep. zzzzzzzz
DDD
-
DDD
will start an interactive debugger session using theEnbugger
module. By default it will use the Perl debugger, but you can switch to the fancier Devel::Trepan debugger by setting the enviroment variablePERL_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!
If you export PERL5OPT='-MXXX=global'
in your shell environment, then XXX
will be always be loaded, and all the functions will also be exported into the main
namespace. That means you can call XXX
from any package with ::XXX
(since ::
is a synonym for main::
).
Also XXX
will be exported as $::XXX
which you can use like this:
$self->foo->$::WWW->bar;
This will warn a YAML dump of $self
, returning $self
so that bar
will be called correctly.
By default, 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 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 require
, you can set the dumper module with the $XXX::DumpModule
global variable.
require XXX;
$XXX::DumpModule = 'YAML::Syck';
XXX::XXX($variable);
If you call a debugging function that calls XXX
for you, XXX
will print the wrong file and line number. To force XXX
to skip a package in the call stack, just define the 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.
Ingy döt Net <ingy@cpan.org>
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.