(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 \%hrefor 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)
