Author image Robert Acock 🤞🌏
and 1 contributors


UNIVERSAL::dump - add dump and other methods to all classes and objects


  use UNIVERSAL::dump; # implicit 'dump'


  use UNIVERSAL::dump qw( dump peek ); # create both "dump" and "peek"


  use UNIVERSAL::dump ( { _dump => 'dump' } ); # dump using "_dump"


  use UNIVERSAL::dump ( { bar => 'Bar::Dumper' } ); # "bar" dumper

 my $foo = Foo->new;
 print $foo->dump;         # send dump of $foo to STDOUT
 print $foo->dump( $bar ); # send dump of $bar to STDOUT

 $foo->dump;         # send dump of $foo to STDERR
 $foo->dump( $bar ); # send dump of $bar to STDERR


This documentation describes version 0.07.


Loading the UNIVERSAL::dump module adds one or more methods to all classes and methods. It is intended as a debugging aid, alleviating the need to add and remove debugging code from modules and programs.

By default, it adds a method "dump" to all classes and objects. This method either dumps the object, or any parameters specified, using Data::Dumper.

As an extra feature, the output is sent to STDERR whenever the method is called in a void context. This makes it easier to dump variable structures while debugging modules and programs.

The name of the method can be specified by parameters when loading the module. These are the method names that are currently recognized:


Return or prints with which class the object (or any value) is blessed. Uses Scalar::Util's "blessed" subroutine.


Return or prints a representation of the object (or any value that is specified). Uses Data::Dumper's "Dumper" subroutine.


Return or prints the internal representation of the object (or any value that is specified). Uses Devel::Peek's "Dump" subroutine.


Return or prints with the memory address of the object (or any value specified). Uses Scalar::Util's "refaddr" subroutine.

If you cannot use one of the preset names of methods, you can specify a reference to a hash instead, in which the key is the new name of the method and the value is the name with which the dumping method is normally indicated.

If you have a dumping subroutine that is not available by default, you can add your own by specifying a reference to a hash, in which the key is the method name, and the value is the (fully qualified) name of the subroutine.

To prevent different modules fighting over the same method name, a check has been built in which will cause an exception when the same method is attempted with a different subroutine name.


One day, I finally had enough of always putting a "dump" and "peek" method in my modules. I came across UNIVERSAL::moniker one day, and realized that I could do something similar for my "dump" methods.


 Data::Dumper (any)


AUTOLOADing methods

Any method called "dump" (or whichever class or object methods you activate with this module) will not be AUTOLOADed because they are already found in the UNIVERSAL package.

Why no direct code refs?

It has been suggested that it should be possible to specify code references as dump subroutines directly. So far I haven't been convinced that this is really necessary. And it complicates the check for parameters versus preset specification. And it complicates the check for double definition of a dump subroutine.

You could try to convince me with a good patch.


Elizabeth Mattijsen, <>.

Please report bugs to <>.


Copyright (c) 2004, 2005, 2006, 2012 Elizabeth Mattijsen ( All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Development of this module sponsored by the kind people of