Giter VIP home page Giter VIP logo

xxx-pm's Introduction

Name

XXX - See Your Data in the Nude

Version

This document describes XXX version 0.38.

xxx-pm xxx-pm

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']});

Description

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.

Functions

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 than warn().

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 than print().

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 the 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 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!

Use XXX without use XXX;

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.

Configuration

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);

Stack Trace Level

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.

Author

Ingy döt Net <[email protected]>

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 http://www.perl.com/perl/misc/Artistic.html

xxx-pm's People

Contributors

ingydotnet avatar perlpunk avatar evancarroll avatar sharyanto avatar perlancar avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.