Search⌘ K

Handling Warnings

Explore how to manage warnings effectively in Perl by using the warnings pragma, Carp functions like carp and cluck, and customizing warning behavior. Understand enabling, disabling, and making warnings fatal, as well as catching and registering warnings to write clearer, safer, and more maintainable Perl programs.

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:

Perl
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:

Perl
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 ...