(Up-to-date source of this post.)
When there's a problem while writing a Perl program the thing I do often is to print out the contents of a variable. There are two ways I usually do it.If the the variable is not complex (i.e. it's a simple scalar, array or hash variable) I use the
print
function: #!/usr/bin/perl use strict; use warnings; # A number between 1 and 100 (both included) my $secret = int( 1 + rand 100 ); # If DEBUG environment variable set, print out the secret number print "The secret number is $secret" if $ENV{DEBUG};Then I just set the environment variable while running the script:
$ DEBUG=1 ./script.pl The secret number is 3In case I'm dealing with a more complicated data structure, like the
$server
variable below, I use Data::Dumper (which outputs valid Perl code):#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $name = 'foo'; my $server = { 'server' => { 'imageRef' => '8a3a9f96-b997-46fd-b7a8-a9e740796ffd', 'flavorRef' => '2', 'name' => $name, 'metadata' => { 'My Server Name' => 'Ubuntu 12.10 (Quantal Quetzal)' }, } }; print Dumper $server;
The Perl Debugger
Sometimes I need something more than just printing out the variable contents. In that case I reach for the Perl debugger:$ perl -d prog.plIt shows each line of code before it executes it. The most common commands are these:
h
-- helps
-- single-step the programx
-- dump a variable value (for complex data usex \%href
or evenx sort keys %hash
)n
-- step over a subroutineq
-- quit the debugger
- Debian/Ubuntu packages:
libncurses-dev libreadline-dev
- Perl module:
Term::ReadLine::Gnu
More
- Basic debugging checklist
- Debugging Perl with hdb (GUI debugger)