Perl Debugging Guide — Perl Debugger, Data Inspection, and Diagnostic Tools
In this tutorial, you will learn about Perl Debugging Guide. We cover key concepts, practical examples, and best practices to help you master this topic.
Perl debugging combines the interactive debugger (perl -d), Data::Dumper/Carp for runtime inspection, and use strict/warnings for catching common errors at compile time -- with Devel::NYTProf for performance profiling.
Strict and Warnings
use strict; # Catch: barewords, global vars, hard refs
use warnings; # Warn about: uninitialized, void context, etc.
# Equivalent to both
use v5.12; # enables strict and warnings implicitly
# Common warnings
my $x; # OK (declared but undef)
print $x + 1; # Warning: uninitialized value
Data::Dumper
use Data::Dumper;
my $complex = {
name => "Alice",
hobbies => ["reading", "coding"],
address => { city => "NYC", zip => 10001 }
};
# Pretty print
print Dumper($complex);
# Customize output
local $Data::Dumper::Indent = 0;
local $Data::Dumper::Sortkeys = 1;
print Dumper($complex);
Carp Module
use Carp;
# carp - warns from caller perspective
sub internal_func {
carp "Deprecated call"; # warns from caller's line
}
# croak - dies from caller perspective
sub validate {
croak "Invalid argument" unless @_;
}
# cluck - full stack trace
use Carp qw(cluck);
cluck "Debug trace";
Interactive Debugger
# Start debugger
perl -d script.pl
# Commands:
# s - step into
# n - step over
# r - return from sub
# c - continue to breakpoint
# b [line] - set breakpoint
# p [expr] - print expression
# x [expr] - evaluate and dump
# q - quit
Common Mistakes
1. Debugging without strict/warnings
Always start scripts with use strict; use warnings;. They catch the majority of common errors.
2. Using print for complex structures
print shows reference addresses. Use Data::Dumper or use DDP; p() for readable output.
3. Not checking return values
System calls, file opens, and DBI operations return undef on failure. Always check.
Practice Questions
1. How do you start the interactive debugger?
perl -d script.pl starts the Perl debugger with your script.
2. What does Data::Dumper do? Converts Perl data structures to printable string representation, showing nested values.
3. What is the difference between carp and croak? carp warns from the caller's perspective. croak dies from the caller's perspective. Both report the error at the call site.
FAQ
{{< faq question="What does use strict do?" >}} Three restrictions: variables must be declared (no auto-vivification), barewords prohibited, and symbolic references disabled. {{< /faq >}}
{{< faq question="How do I profile Perl code?" >}}
Use perl -d:NYTProf script.pl then nytprofhtml for a detailed HTML performance report.
{{< /faq >}}
{{< faq question="What is the -MO=Deparse flag?" >}}
Decompiles Perl code to show how the parser interpreted it: perl -MO=Deparse -e 'print "hi"'.
{{< /faq >}}
What's Next
Now learn about testing in Perl.
| Topic | Description | Link |
|---|---|---|
| Testing | Perl testing with Test::More | {{< ref "24-tests" >}} |
| Unicode | Unicode and encoding | {{< ref "27-unicode" >}} |
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro