3 # Regenerate (overwriting only if changed):
8 # from information hardcoded into this script (the $tree hash), plus the
9 # template for warnings.pm in the DATA section.
11 # When changing the number of warnings, t/op/caller.t should change to
12 # correspond with the value of $BYTES in lib/warnings.pm
14 # With an argument of 'tree', just dump the contents of $tree and exits.
15 # Also accepts the standard regen_lib -q and -v args.
17 # This script is normally invoked from regen.pl.
22 require 'regen/regen_lib.pl';
27 sub DEFAULT_ON () { 1 }
28 sub DEFAULT_OFF () { 2 }
33 'pipe' => [ 5.008, DEFAULT_OFF],
34 'unopened' => [ 5.008, DEFAULT_OFF],
35 'closed' => [ 5.008, DEFAULT_OFF],
36 'newline' => [ 5.008, DEFAULT_OFF],
37 'exec' => [ 5.008, DEFAULT_OFF],
38 'layer' => [ 5.008, DEFAULT_OFF],
39 'syscalls' => [ 5.019, DEFAULT_OFF],
41 'syntax' => [ 5.008, {
42 'ambiguous' => [ 5.008, DEFAULT_OFF],
43 'semicolon' => [ 5.008, DEFAULT_OFF],
44 'precedence' => [ 5.008, DEFAULT_OFF],
45 'bareword' => [ 5.008, DEFAULT_OFF],
46 'reserved' => [ 5.008, DEFAULT_OFF],
47 'digit' => [ 5.008, DEFAULT_OFF],
48 'parenthesis' => [ 5.008, DEFAULT_OFF],
49 'printf' => [ 5.008, DEFAULT_OFF],
50 'prototype' => [ 5.008, DEFAULT_OFF],
51 'qw' => [ 5.008, DEFAULT_OFF],
52 'illegalproto' => [ 5.011, DEFAULT_OFF],
54 'severe' => [ 5.008, {
55 'inplace' => [ 5.008, DEFAULT_ON],
56 'internal' => [ 5.008, DEFAULT_OFF],
57 'debugging' => [ 5.008, DEFAULT_ON],
58 'malloc' => [ 5.008, DEFAULT_ON],
60 'deprecated' => [ 5.008, DEFAULT_ON],
61 'void' => [ 5.008, DEFAULT_OFF],
62 'recursion' => [ 5.008, DEFAULT_OFF],
63 'redefine' => [ 5.008, DEFAULT_OFF],
64 'numeric' => [ 5.008, DEFAULT_OFF],
65 'uninitialized' => [ 5.008, DEFAULT_OFF],
66 'once' => [ 5.008, DEFAULT_OFF],
67 'misc' => [ 5.008, DEFAULT_OFF],
68 'regexp' => [ 5.008, DEFAULT_OFF],
69 'glob' => [ 5.008, DEFAULT_ON],
70 'untie' => [ 5.008, DEFAULT_OFF],
71 'substr' => [ 5.008, DEFAULT_OFF],
72 'taint' => [ 5.008, DEFAULT_OFF],
73 'signal' => [ 5.008, DEFAULT_OFF],
74 'closure' => [ 5.008, DEFAULT_OFF],
75 'overflow' => [ 5.008, DEFAULT_OFF],
76 'portable' => [ 5.008, DEFAULT_OFF],
78 'surrogate' => [ 5.013, DEFAULT_OFF],
79 'nonchar' => [ 5.013, DEFAULT_OFF],
80 'non_unicode' => [ 5.013, DEFAULT_OFF],
82 'exiting' => [ 5.008, DEFAULT_OFF],
83 'pack' => [ 5.008, DEFAULT_OFF],
84 'unpack' => [ 5.008, DEFAULT_OFF],
85 'threads' => [ 5.008, DEFAULT_OFF],
86 'imprecision' => [ 5.011, DEFAULT_OFF],
87 'experimental' => [ 5.017, {
88 'experimental::lexical_subs' =>
89 [ 5.017, DEFAULT_ON ],
90 'experimental::regex_sets' =>
91 [ 5.017, DEFAULT_ON ],
92 'experimental::smartmatch' =>
93 [ 5.017, DEFAULT_ON ],
94 'experimental::postderef' =>
95 [ 5.019, DEFAULT_ON ],
96 'experimental::signatures' =>
97 [ 5.019, DEFAULT_ON ],
98 'experimental::win32_perlio' =>
99 [ 5.021, DEFAULT_ON ],
100 'experimental::refaliasing' =>
101 [ 5.021, DEFAULT_ON ],
102 'experimental::re_strict' =>
103 [ 5.021, DEFAULT_ON ],
104 'experimental::const_attr' =>
105 [ 5.021, DEFAULT_ON ],
106 'experimental::bitwise' =>
107 [ 5.021, DEFAULT_ON ],
110 'missing' => [ 5.021, DEFAULT_OFF],
111 'redundant' => [ 5.021, DEFAULT_OFF],
112 'locale' => [ 5.021, DEFAULT_ON],
114 #'default' => [ 5.008, DEFAULT_ON ],
131 foreach $k (sort keys %$tre) {
133 die "duplicate key $k\n" if defined $list{$k} ;
134 die "Value associated with key '$k' is not an ARRAY reference"
135 if !ref $v || ref $v ne 'ARRAY' ;
137 my ($ver, $rest) = @{ $v } ;
138 push @{ $v_list{$ver} }, $k;
141 { valueWalk ($rest) }
150 foreach my $ver ( sort { $a <=> $b } keys %v_list ) {
151 foreach my $name (@{ $v_list{$ver} } ) {
152 $ValueToName{ $index } = [ uc $name, $ver ] ;
153 $NameToValue{ uc $name } = $index ++ ;
160 ###########################################################################
168 foreach $k (sort keys %$tre) {
170 die "duplicate key $k\n" if defined $list{$k} ;
171 die "Can't find key '$k'"
172 if ! defined $NameToValue{uc $k} ;
173 push @{ $list{$k} }, $NameToValue{uc $k} ;
174 die "Value associated with key '$k' is not an ARRAY reference"
175 if !ref $v || ref $v ne 'ARRAY' ;
177 my ($ver, $rest) = @{ $v } ;
179 { push (@{ $list{$k} }, walk ($rest)) }
180 elsif ($rest == DEFAULT_ON)
181 { push @def, $NameToValue{uc $k} }
183 push @list, @{ $list{$k} } ;
189 ###########################################################################
196 for my $i (1 .. @a - 1) {
198 if $a[$i] == $a[$i - 1] + 1
199 && ($i >= @a - 1 || $a[$i] + 1 == $a[$i + 1] );
201 $out[-1] = $a[-1] if $out[-1] eq "..";
203 my $out = join(",",@out);
205 $out =~ s/,(\.\.,)+/../g ;
209 ###########################################################################
216 my $max = (sort {$a <=> $b} map { length $_ } keys %$tre)[-1] ;
217 my @keys = sort keys %$tre ;
221 while ($k = shift @keys) {
223 die "Value associated with key '$k' is not an ARRAY reference"
224 if !ref $v || ref $v ne 'ARRAY' ;
228 $rv .= $prefix . "|\n" ;
229 $rv .= $prefix . "+- $k" ;
230 $offset = ' ' x ($max + 4) ;
233 $rv .= $prefix . "$k" ;
234 $offset = ' ' x ($max + 1) ;
237 my ($ver, $rest) = @{ $v } ;
240 my $bar = @keys ? "|" : " ";
241 $rv .= " -" . "-" x ($max - length $k ) . "+\n" ;
242 $rv .= warningsTree ($rest, $prefix . $bar . $offset )
251 ###########################################################################
255 my ($f, $max, @a) = @_ ;
256 my $mask = "\x00" x $max ;
260 vec($mask, $_, 1) = 1 ;
263 foreach (unpack("C*", $mask)) {
265 $string .= '\x' . sprintf("%2.2x", $_)
268 $string .= '\\' . sprintf("%o", $_)
277 return mkHexOct("x", $max, @a);
283 return mkHexOct("o", $max, @a);
286 ###########################################################################
288 if (@ARGV && $ARGV[0] eq "tree")
290 print warningsTree($tree, " ") ;
294 my ($warn, $pm) = map {
295 open_new($_, '>', { by => 'regen/warnings.pl' });
296 } 'warnings.h', 'lib/warnings.pm';
298 my ($index, $warn_size);
301 # generate warnings.h
305 #define Off(x) ((x) / 8)
306 #define Bit(x) (1 << ((x) % 8))
307 #define IsSet(a, x) ((a)[Off(x)] & Bit(x))
310 #define G_WARN_OFF 0 /* $^W == 0 */
311 #define G_WARN_ON 1 /* -w flag and $^W != 0 */
312 #define G_WARN_ALL_ON 2 /* -W flag */
313 #define G_WARN_ALL_OFF 4 /* -X flag */
314 #define G_WARN_ONCE 8 /* set if 'once' ever enabled */
315 #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF)
317 #define pWARN_STD NULL
318 #define pWARN_ALL (((STRLEN*)0)+1) /* use warnings 'all' */
319 #define pWARN_NONE (((STRLEN*)0)+2) /* no warnings 'all' */
321 #define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \
324 /* if PL_warnhook is set to this value, then warnings die */
325 #define PERL_WARNHOOK_FATAL (&PL_sv_placeholder)
331 $index = orderValues();
333 die <<EOM if $index > 255 ;
334 Too many warnings categories -- max is 255
335 rewrite packWARN* & unpackWARN* macros
341 $warn_size = int($index / 8) + ($index % 8 != 0) ;
345 foreach $k (sort { $a <=> $b } keys %ValueToName) {
346 my ($name, $version) = @{ $ValueToName{$k} };
347 print $warn "\n/* Warnings Categories added in Perl $version */\n\n"
348 if $last_ver != $version ;
350 print $warn tab(6, "#define WARN_$name"), " $k\n" ;
351 $last_ver = $version ;
355 print $warn tab(6, '#define WARNsize'), " $warn_size\n" ;
356 print $warn tab(6, '#define WARN_ALLstring'), ' "', ('\125' x $warn_size) , "\"\n" ;
357 print $warn tab(6, '#define WARN_NONEstring'), ' "', ('\0' x $warn_size) , "\"\n" ;
361 #define isLEXWARN_on (PL_curcop->cop_warnings != pWARN_STD)
362 #define isLEXWARN_off (PL_curcop->cop_warnings == pWARN_STD)
363 #define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
364 #define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)))
365 #define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
367 #define DUP_WARNINGS(p) \
368 (specialWARN(p) ? (STRLEN*)(p) \
369 : (STRLEN*)CopyD(p, PerlMemShared_malloc(sizeof(*p)+*p), sizeof(*p)+*p, \
372 #define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
374 /* The w1, w2 ... should be independent warnings categories; one shouldn't be
375 * a subcategory of any other */
377 #define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
378 #define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
379 #define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
381 #define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
382 #define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
383 #define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
384 #define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
388 #define packWARN(a) (a )
390 /* The a, b, ... should be independent warnings categories; one shouldn't be
391 * a subcategory of any other */
393 #define packWARN2(a,b) ((a) | ((b)<<8) )
394 #define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
395 #define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
397 #define unpackWARN1(x) ((x) & 0xFF)
398 #define unpackWARN2(x) (((x) >>8) & 0xFF)
399 #define unpackWARN3(x) (((x) >>16) & 0xFF)
400 #define unpackWARN4(x) (((x) >>24) & 0xFF)
403 ( ! specialWARN(PL_curcop->cop_warnings) && \
404 ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) || \
405 isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \
406 isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \
407 isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \
408 isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))
410 /* end of file warnings.h */
413 read_only_bottom_close_and_rename($warn);
417 last if /^KEYWORDS$/ ;
422 print $pm "our %Offsets = (" ;
423 foreach my $k (sort { $a <=> $b } keys %ValueToName) {
424 my ($name, $version) = @{ $ValueToName{$k} };
427 if ( $last_ver != $version ) {
429 print $pm tab(6, " # Warnings Categories added in Perl $version");
432 print $pm tab(6, " '$name'"), "=> $k,\n" ;
433 $last_ver = $version;
438 print $pm "our %Bits = (\n" ;
439 foreach my $k (sort keys %list) {
442 my @list = sort { $a <=> $b } @$v ;
444 print $pm tab(6, " '$k'"), '=> "',
445 mkHex($warn_size, map $_ * 2 , @list),
446 '", # [', mkRange(@list), "]\n" ;
451 print $pm "our %DeadBits = (\n" ;
452 foreach my $k (sort keys %list) {
455 my @list = sort { $a <=> $b } @$v ;
457 print $pm tab(6, " '$k'"), '=> "',
458 mkHex($warn_size, map $_ * 2 + 1 , @list),
459 '", # [', mkRange(@list), "]\n" ;
463 print $pm "# These are used by various things, including our own tests\n";
464 print $pm tab(6, 'our $NONE'), '= "', ('\0' x $warn_size) , "\";\n" ;
465 print $pm tab(6, 'our $DEFAULT'), '= "', mkHex($warn_size, map $_ * 2, @def),
466 '", # [', mkRange(@def), "]\n" ;
467 print $pm tab(6, 'our $LAST_BIT'), '= ' . "$index ;\n" ;
468 print $pm tab(6, 'our $BYTES'), '= ' . "$warn_size ;\n" ;
470 if ($_ eq "=for warnings.pl tree-goes-here\n") {
471 print $pm warningsTree($tree, " ");
477 read_only_bottom_close_and_rename($pm);
482 our $VERSION = '1.34';
484 # Verify that we're called correctly so that warnings will work.
485 # see also strict.pm.
486 unless ( __FILE__ =~ /(^|[\/\\])\Q${\__PACKAGE__}\E\.pmc?$/ ) {
487 my (undef, $f, $l) = caller;
488 die("Incorrect use of pragma '${\__PACKAGE__}' at $f line $l.\n");
493 our $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
497 require Carp; # this initializes %CarpInternal
498 local $Carp::CarpInternal{'warnings'};
499 delete $Carp::CarpInternal{'warnings'};
509 foreach my $word ( @_ ) {
510 if ($word eq 'FATAL') {
514 elsif ($word eq 'NONFATAL') {
518 elsif ($catmask = $Bits{$word}) {
520 $mask |= $DeadBits{$word} if $fatal ;
521 $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
524 { Croaker("Unknown warnings category '$word'")}
532 # called from B::Deparse.pm
533 push @_, 'all' unless @_ ;
534 return _bits(undef, @_) ;
541 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
543 if (vec($mask, $Offsets{'all'}, 1)) {
544 $mask |= $Bits{'all'} ;
545 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
548 # append 'all' when implied (after a lone "FATAL" or "NONFATAL")
549 push @_, 'all' if @_==1 && ( $_[0] eq 'FATAL' || $_[0] eq 'NONFATAL' );
551 # Empty @_ is equivalent to @_ = 'all' ;
552 ${^WARNING_BITS} = @_ ? _bits($mask, @_) : $mask | $Bits{all} ;
560 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
562 if (vec($mask, $Offsets{'all'}, 1)) {
563 $mask |= $Bits{'all'} ;
564 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
567 # append 'all' when implied (empty import list or after a lone "FATAL")
568 push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
570 foreach my $word ( @_ ) {
571 if ($word eq 'FATAL') {
574 elsif ($catmask = $Bits{$word}) {
575 $mask &= ~($catmask | $DeadBits{$word} | $All);
578 { Croaker("Unknown warnings category '$word'")}
581 ${^WARNING_BITS} = $mask ;
584 my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
586 sub MESSAGE () { 4 };
596 my $has_message = $wanted & MESSAGE;
598 unless (@_ == 1 || @_ == ($has_message ? 2 : 0)) {
599 my $sub = (caller 1)[3];
600 my $syntax = $has_message ? "[category,] 'message'" : '[category]';
601 Croaker("Usage: $sub($syntax)");
604 my $message = pop if $has_message;
607 # check the category supplied.
609 if (my $type = ref $category) {
610 Croaker("not an object")
611 if exists $builtin_type{$type};
615 $offset = $Offsets{$category};
616 Croaker("Unknown warnings category '$category'")
617 unless defined $offset;
620 $category = (caller(1))[0] ;
621 $offset = $Offsets{$category};
622 Croaker("package '$category' not registered for warnings")
623 unless defined $offset ;
631 while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
632 last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
637 $i = _error_loc(); # see where Carp will allocate the error
640 # Default to 0 if caller returns nothing. Default to $DEFAULT if it
641 # explicitly returns undef.
642 my(@callers_bitmask) = (caller($i))[9] ;
643 my $callers_bitmask =
644 @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
647 foreach my $type (FATAL, NORMAL) {
648 next unless $wanted & $type;
650 push @results, (vec($callers_bitmask, $offset + $type - 1, 1) ||
651 vec($callers_bitmask, $Offsets{'all'} + $type - 1, 1));
654 # &enabled and &fatal_enabled
655 return $results[0] unless $has_message;
657 # &warnif, and the category is neither enabled as warning nor as fatal
658 return if $wanted == (NORMAL | FATAL | MESSAGE)
659 && !($results[0] || $results[1]);
662 Carp::croak($message) if $results[0];
663 # will always get here for &warn. will only get here for &warnif if the
664 # category is enabled
665 Carp::carp($message);
673 vec($mask, $bit, 1) = 1;
677 sub register_categories
681 for my $name (@names) {
682 if (! defined $Bits{$name}) {
683 $Bits{$name} = _mkMask($LAST_BIT);
684 vec($Bits{'all'}, $LAST_BIT, 1) = 1;
685 $Offsets{$name} = $LAST_BIT ++;
686 foreach my $k (keys %Bits) {
687 vec($Bits{$k}, $LAST_BIT, 1) = 0;
689 $DeadBits{$name} = _mkMask($LAST_BIT);
690 vec($DeadBits{'all'}, $LAST_BIT++, 1) = 1;
697 goto &Carp::short_error_loc; # don't introduce another stack frame
702 return __chk(NORMAL, @_);
707 return __chk(FATAL, @_);
712 return __chk(FATAL | MESSAGE, @_);
717 return __chk(NORMAL | FATAL | MESSAGE, @_);
720 # These are not part of any public interface, so we can delete them to save
722 delete @warnings::{qw(NORMAL FATAL MESSAGE)};
728 warnings - Perl pragma to control optional warnings
738 use warnings::register;
739 if (warnings::enabled()) {
740 warnings::warn("some warning");
743 if (warnings::enabled("void")) {
744 warnings::warn("void", "some warning");
747 if (warnings::enabled($object)) {
748 warnings::warn($object, "some warning");
751 warnings::warnif("some warning");
752 warnings::warnif("void", "some warning");
753 warnings::warnif($object, "some warning");
757 The C<warnings> pragma gives control over which warnings are enabled in
758 which parts of a Perl program. It's a more flexible alternative for
759 both the command line flag B<-w> and the equivalent Perl variable,
762 This pragma works just like the C<strict> pragma.
763 This means that the scope of the warning pragma is limited to the
764 enclosing block. It also means that the pragma setting will not
765 leak across files (via C<use>, C<require> or C<do>). This allows
766 authors to independently define the degree of warning checks that will
767 be applied to their module.
769 By default, optional warnings are disabled, so any legacy code that
770 doesn't attempt to control the warnings will work unchanged.
772 All warnings are enabled in a block by either of these:
777 Similarly all warnings are disabled in a block by either of these:
782 For example, consider the code below:
792 The code in the enclosing block has warnings enabled, but the inner
793 block has them disabled. In this case that means the assignment to the
794 scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
795 warning, but the assignment to the scalar C<$b> will not.
797 =head2 Default Warnings and Optional Warnings
799 Before the introduction of lexical warnings, Perl had two classes of
800 warnings: mandatory and optional.
802 As its name suggests, if your code tripped a mandatory warning, you
803 would get a warning whether you wanted it or not.
804 For example, the code below would always produce an C<"isn't numeric">
805 warning about the "2:".
809 With the introduction of lexical warnings, mandatory warnings now become
810 I<default> warnings. The difference is that although the previously
811 mandatory warnings are still enabled by default, they can then be
812 subsequently enabled or disabled with the lexical warning pragma. For
813 example, in the code below, an C<"isn't numeric"> warning will only
814 be reported for the C<$a> variable.
820 Note that neither the B<-w> flag or the C<$^W> can be used to
821 disable/enable default warnings. They are still mandatory in this case.
823 =head2 What's wrong with B<-w> and C<$^W>
825 Although very useful, the big problem with using B<-w> on the command
826 line to enable warnings is that it is all or nothing. Take the typical
827 scenario when you are writing a Perl program. Parts of the code you
828 will write yourself, but it's very likely that you will make use of
829 pre-written Perl modules. If you use the B<-w> flag in this case, you
830 end up enabling warnings in pieces of code that you haven't written.
832 Similarly, using C<$^W> to either disable or enable blocks of code is
833 fundamentally flawed. For a start, say you want to disable warnings in
834 a block of code. You might expect this to be enough to do the trick:
842 When this code is run with the B<-w> flag, a warning will be produced
843 for the C<$a> line: C<"Reversed += operator">.
845 The problem is that Perl has both compile-time and run-time warnings. To
846 disable compile-time warnings you need to rewrite the code like this:
854 The other big problem with C<$^W> is the way you can inadvertently
855 change the warning setting in unexpected places in your code. For example,
856 when the code below is run (without the B<-w> flag), the second call
857 to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas
872 This is a side-effect of C<$^W> being dynamically scoped.
874 Lexical warnings get around these limitations by allowing finer control
875 over where warnings can or can't be tripped.
877 =head2 Controlling Warnings from the Command Line
879 There are three Command Line flags that can be used to control when
880 warnings are (or aren't) produced:
887 This is the existing flag. If the lexical warnings pragma is B<not>
888 used in any of you code, or any of the modules that you use, this flag
889 will enable warnings everywhere. See L<Backward Compatibility> for
890 details of how this flag interacts with lexical warnings.
895 If the B<-W> flag is used on the command line, it will enable all warnings
896 throughout the program regardless of whether warnings were disabled
897 locally using C<no warnings> or C<$^W =0>.
898 This includes all files that get
899 included via C<use>, C<require> or C<do>.
900 Think of it as the Perl equivalent of the "lint" command.
905 Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
909 =head2 Backward Compatibility
911 If you are used to working with a version of Perl prior to the
912 introduction of lexically scoped warnings, or have code that uses both
913 lexical warnings and C<$^W>, this section will describe how they interact.
915 How Lexical Warnings interact with B<-w>/C<$^W>:
921 If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
922 control warnings is used and neither C<$^W> nor the C<warnings> pragma
923 are used, then default warnings will be enabled and optional warnings
925 This means that legacy code that doesn't attempt to control the warnings
930 The B<-w> flag just sets the global C<$^W> variable as in 5.005. This
931 means that any legacy code that currently relies on manipulating C<$^W>
932 to control warning behavior will still work as is.
936 Apart from now being a boolean, the C<$^W> variable operates in exactly
937 the same horrible uncontrolled global way, except that it cannot
938 disable/enable default warnings.
942 If a piece of code is under the control of the C<warnings> pragma,
943 both the C<$^W> variable and the B<-w> flag will be ignored for the
944 scope of the lexical warning.
948 The only way to override a lexical warnings setting is with the B<-W>
949 or B<-X> command line flags.
953 The combined effect of 3 & 4 is that it will allow code which uses
954 the C<warnings> pragma to control the warning behavior of $^W-type
955 code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
957 =head2 Category Hierarchy
958 X<warning, categories>
960 A hierarchy of "categories" have been defined to allow groups of warnings
961 to be enabled/disabled in isolation.
963 The current hierarchy is:
965 =for warnings.pl tree-goes-here
967 Just like the "strict" pragma any of these categories can be combined
969 use warnings qw(void redefine);
970 no warnings qw(io syntax untie);
972 Also like the "strict" pragma, if there is more than one instance of the
973 C<warnings> pragma in a given scope the cumulative effect is additive.
975 use warnings qw(void); # only "void" warnings enabled
977 use warnings qw(io); # only "void" & "io" warnings enabled
979 no warnings qw(void); # only "io" warnings enabled
981 To determine which category a specific warning has been assigned to see
984 Note: Before Perl 5.8.0, the lexical warnings category "deprecated" was a
985 sub-category of the "syntax" category. It is now a top-level category
988 Note: Before 5.21.0, the "missing" lexical warnings category was
989 internally defined to be the same as the "uninitialized" category. It
990 is now a top-level category in its own right.
992 =head2 Fatal Warnings
995 The presence of the word "FATAL" in the category list will escalate
996 warnings in those categories into fatal errors in that lexical scope.
998 B<NOTE:> FATAL warnings should be used with care, particularly
999 C<< FATAL => 'all' >>.
1001 Libraries using L<warnings::warn|/FUNCTIONS> for custom warning categories
1002 generally don't expect L<warnings::warn|/FUNCTIONS> to be fatal and can wind up
1003 in an unexpected state as a result. For XS modules issuing categorized
1004 warnings, such unanticipated exceptions could also expose memory leak bugs.
1006 Moreover, the Perl interpreter itself has had serious bugs involving
1007 fatalized warnings. For a summary of resolved and unresolved problems as
1008 of January 2015, please see
1009 L<this perl5-porters post|http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225235.html>.
1011 While some developers find fatalizing some warnings to be a useful
1012 defensive programming technique, using C<< FATAL => 'all' >> to fatalize
1013 all possible warning categories -- including custom ones -- is particularly
1014 risky. Therefore, the use of C<< FATAL => 'all' >> is
1015 L<discouraged|perlpolicy/discouraged>.
1017 The L<strictures|strictures/VERSION-2> module on CPAN offers one example of
1018 a warnings subset that the module's authors believe is relatively safe to
1021 B<NOTE:> users of FATAL warnings, especially those using
1022 C<< FATAL => 'all' >>, should be fully aware that they are risking future
1023 portability of their programs by doing so. Perl makes absolutely no
1024 commitments to not introduce new warnings or warnings categories in the
1025 future; indeed, we explicitly reserve the right to do so. Code that may
1026 not warn now may warn in a future release of Perl if the Perl5 development
1027 team deems it in the best interests of the community to do so. Should code
1028 using FATAL warnings break due to the introduction of a new warning we will
1029 NOT consider it an incompatible change. Users of FATAL warnings should
1030 take special caution during upgrades to check to see if their code triggers
1031 any new warnings and should pay particular attention to the fine print of
1032 the documentation of the features they use to ensure they do not exploit
1033 features that are documented as risky, deprecated, or unspecified, or where
1034 the documentation says "so don't do that", or anything with the same sense
1035 and spirit. Use of such features in combination with FATAL warnings is
1036 ENTIRELY AT THE USER'S RISK.
1038 The following documentation describes how to use FATAL warnings but the
1039 perl5 porters strongly recommend that you understand the risks before doing
1040 so, especially for library code intended for use by others, as there is no
1041 way for downstream users to change the choice of fatal categories.
1043 In the code below, the use of C<time>, C<length>
1044 and C<join> can all produce a C<"Useless use of xxx in void context">
1052 use warnings FATAL => qw(void);
1060 When run it produces this output
1062 Useless use of time in void context at fatal line 3.
1063 Useless use of length in void context at fatal line 7.
1065 The scope where C<length> is used has escalated the C<void> warnings
1066 category into a fatal error, so the program terminates immediately when it
1067 encounters the warning.
1069 To explicitly turn off a "FATAL" warning you just disable the warning
1070 it is associated with. So, for example, to disable the "void" warning
1071 in the example above, either of these will do the trick:
1073 no warnings qw(void);
1074 no warnings FATAL => qw(void);
1076 If you want to downgrade a warning that has been escalated into a fatal
1077 error back to a normal warning, you can use the "NONFATAL" keyword. For
1078 example, the code below will promote all warnings into fatal errors,
1079 except for those in the "syntax" category.
1081 use warnings FATAL => 'all', NONFATAL => 'syntax';
1083 As of Perl 5.20, instead of C<< use warnings FATAL => 'all'; >> you can
1086 use v5.20; # Perl 5.20 or greater is required for the following
1087 use warnings 'FATAL'; # short form of "use warnings FATAL => 'all';"
1089 If you want your program to be compatible with versions of Perl before
1090 5.20, you must use C<< use warnings FATAL => 'all'; >> instead. (In
1091 previous versions of Perl, the behavior of the statements
1092 C<< use warnings 'FATAL'; >>, C<< use warnings 'NONFATAL'; >> and
1093 C<< no warnings 'FATAL'; >> was unspecified; they did not behave as if
1094 they included the C<< => 'all' >> portion. As of 5.20, they do.)
1096 =head2 Reporting Warnings from a Module
1097 X<warning, reporting> X<warning, registering>
1099 The C<warnings> pragma provides a number of functions that are useful for
1100 module authors. These are used when you want to report a module-specific
1101 warning to a calling module has enabled warnings via the C<warnings>
1104 Consider the module C<MyMod::Abc> below.
1108 use warnings::register;
1112 if ($path !~ m#^/#) {
1113 warnings::warn("changing relative path to /var/abc")
1114 if warnings::enabled();
1115 $path = "/var/abc/$path";
1121 The call to C<warnings::register> will create a new warnings category
1122 called "MyMod::Abc", i.e. the new category name matches the current
1123 package name. The C<open> function in the module will display a warning
1124 message if it gets given a relative path as a parameter. This warnings
1125 will only be displayed if the code that uses C<MyMod::Abc> has actually
1126 enabled them with the C<warnings> pragma like below.
1129 use warnings 'MyMod::Abc';
1131 abc::open("../fred.txt");
1133 It is also possible to test whether the pre-defined warnings categories are
1134 set in the calling module with the C<warnings::enabled> function. Consider
1135 this snippet of code:
1140 warnings::warnif("deprecated",
1141 "open is deprecated, use new instead");
1149 The function C<open> has been deprecated, so code has been included to
1150 display a warning message whenever the calling module has (at least) the
1151 "deprecated" warnings category enabled. Something like this, say.
1153 use warnings 'deprecated';
1156 MyMod::Abc::open($filename);
1158 Either the C<warnings::warn> or C<warnings::warnif> function should be
1159 used to actually display the warnings message. This is because they can
1160 make use of the feature that allows warnings to be escalated into fatal
1161 errors. So in this case
1164 use warnings FATAL => 'MyMod::Abc';
1166 MyMod::Abc::open('../fred.txt');
1168 the C<warnings::warnif> function will detect this and die after
1169 displaying the warning message.
1171 The three warnings functions, C<warnings::warn>, C<warnings::warnif>
1172 and C<warnings::enabled> can optionally take an object reference in place
1173 of a category name. In this case the functions will use the class name
1174 of the object as the warnings category.
1176 Consider this example:
1181 use warnings::register;
1194 if ($value % 2 && warnings::enabled($self))
1195 { warnings::warn($self, "Odd numbers are unsafe") }
1202 $self->check($value);
1210 use warnings::register;
1212 our @ISA = qw( Original );
1222 The code below makes use of both modules, but it only enables warnings from
1227 use warnings 'Derived';
1228 my $a = Original->new();
1230 my $b = Derived->new();
1233 When this code is run only the C<Derived> object, C<$b>, will generate
1236 Odd numbers are unsafe at main.pl line 7
1238 Notice also that the warning is reported at the line where the object is first
1241 When registering new categories of warning, you can supply more names to
1242 warnings::register like this:
1245 use warnings::register qw(format precision);
1249 warnings::warnif('MyModule::format', '...');
1255 =item use warnings::register
1257 Creates a new warnings category with the same name as the package where
1258 the call to the pragma is used.
1260 =item warnings::enabled()
1262 Use the warnings category with the same name as the current package.
1264 Return TRUE if that warnings category is enabled in the calling module.
1265 Otherwise returns FALSE.
1267 =item warnings::enabled($category)
1269 Return TRUE if the warnings category, C<$category>, is enabled in the
1271 Otherwise returns FALSE.
1273 =item warnings::enabled($object)
1275 Use the name of the class for the object reference, C<$object>, as the
1278 Return TRUE if that warnings category is enabled in the first scope
1279 where the object is used.
1280 Otherwise returns FALSE.
1282 =item warnings::fatal_enabled()
1284 Return TRUE if the warnings category with the same name as the current
1285 package has been set to FATAL in the calling module.
1286 Otherwise returns FALSE.
1288 =item warnings::fatal_enabled($category)
1290 Return TRUE if the warnings category C<$category> has been set to FATAL in
1292 Otherwise returns FALSE.
1294 =item warnings::fatal_enabled($object)
1296 Use the name of the class for the object reference, C<$object>, as the
1299 Return TRUE if that warnings category has been set to FATAL in the first
1300 scope where the object is used.
1301 Otherwise returns FALSE.
1303 =item warnings::warn($message)
1305 Print C<$message> to STDERR.
1307 Use the warnings category with the same name as the current package.
1309 If that warnings category has been set to "FATAL" in the calling module
1310 then die. Otherwise return.
1312 =item warnings::warn($category, $message)
1314 Print C<$message> to STDERR.
1316 If the warnings category, C<$category>, has been set to "FATAL" in the
1317 calling module then die. Otherwise return.
1319 =item warnings::warn($object, $message)
1321 Print C<$message> to STDERR.
1323 Use the name of the class for the object reference, C<$object>, as the
1326 If that warnings category has been set to "FATAL" in the scope where C<$object>
1327 is first used then die. Otherwise return.
1330 =item warnings::warnif($message)
1334 if (warnings::enabled())
1335 { warnings::warn($message) }
1337 =item warnings::warnif($category, $message)
1341 if (warnings::enabled($category))
1342 { warnings::warn($category, $message) }
1344 =item warnings::warnif($object, $message)
1348 if (warnings::enabled($object))
1349 { warnings::warn($object, $message) }
1351 =item warnings::register_categories(@names)
1353 This registers warning categories for the given names and is primarily for
1354 use by the warnings::register pragma.
1358 See also L<perlmodlib/Pragmatic Modules> and L<perldiag>.