Handling Warnings
Learn how to handle warnings in Perl.
While there’s more than one way to write a working Perl program, some of those ways can be confusing, unclear, and even incorrect. Perl’s warnings system can help us avoid these situations.
Producing warnings
Use the warn
built-in to emit a warning:
warn 'Something went wrong!';
warn
prints a list of values to the STDERR
filehandle. Perl will append the filename and line number of the warn
call unless the last element of the list ends in a newline.
The carp()
function
The core Carp
module extends Perl’s warning mechanisms. Its carp()
function reports a warning from the perspective of the calling code. Consider a function like:
use Carp 'carp';sub only_two_arguments {my ($lop, $rop) = @_;carp( 'Too many arguments provided' ) if @_ > 2;return $lop * $rop;}say only_two_arguments(1, 2, 3);
The arity warning will include the filename and line number of the calling code, not only_two_arguments()
. The cluck()
of Carp
is similar, but it produces
a backtrace of all function calls that led to the current function.
The verbose mode of Carp
adds backtraces to all warnings produced by carp()
and
croak()
throughout the entire program:
perl -MCarp=verbose my_prog.pl
Use Carp
when writing modules instead of warn
or die
.
Note: Sometimes, you’ll have to debug code written without the use of
carp()
or ...