use warnings
use warnings; # same as importing "all" no warnings; # same as unimporting "all" use warnings::register; if (warnings::enabled()) { warnings::warn("some warning"); } if (warnings::enabled("void")) { warnings::warn("void", "some warning"); }
This lexically scoped pragma permits flexible control over Perl's built-in warnings, both those emitted by the compiler as well as those from the run-time system.
Once upon a time, the only control you had in Perl over the
treatment of warnings in your program was through either the
-w
command-line option or the
$^W
variable. Although useful, these tend to be
all-or-nothing affairs. The -w
option ends up
enabling warnings in pieces of module code that you may not have
written, which is occasionally problematic for you and embarrassing
for the original author. Using $^W
to either
disable or enable blocks of code can be less than optimal because it
works only during execution time, not during compile time.[3] Another issue is that this program-wide global variable
is scoped dynamically, not lexically. That means that if you enable it
in a block and then from there call other code, you again risk
enabling warnings in code not developed with such exacting standards
in mind.
The warnings
pragma circumvents these
limitations by being a lexically scoped, compile-time mechanism that
permits finer control over where warnings can or can't be triggered. A
hierarchy of warning categories (see Figure 31.1) has been defined to allow groups of warnings ...
Get Programming Perl, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.