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::lexical_topic' =>
93 [ 5.017, DEFAULT_ON ],
94 'experimental::smartmatch' =>
95 [ 5.017, DEFAULT_ON ],
96 'experimental::postderef' =>
97 [ 5.019, DEFAULT_ON ],
98 'experimental::signatures' =>
99 [ 5.019, DEFAULT_ON ],
100 'experimental::win32_perlio' =>
101 [ 5.021, DEFAULT_ON ],
102 'experimental::refaliasing' =>
103 [ 5.021, DEFAULT_ON ],
104 'experimental::re_strict' =>
105 [ 5.021, DEFAULT_ON ],
106 'experimental::const_attr' =>
107 [ 5.021, DEFAULT_ON ],
108 'experimental::bitwise' =>
109 [ 5.021, DEFAULT_ON ],
112 'missing' => [ 5.021, DEFAULT_OFF],
113 'redundant' => [ 5.021, DEFAULT_OFF],
114 'locale' => [ 5.021, DEFAULT_ON],
116 #'default' => [ 5.008, DEFAULT_ON ],
133 foreach $k (sort keys %$tre) {
135 die "duplicate key $k\n" if defined $list{$k} ;
136 die "Value associated with key '$k' is not an ARRAY reference"
137 if !ref $v || ref $v ne 'ARRAY' ;
139 my ($ver, $rest) = @{ $v } ;
140 push @{ $v_list{$ver} }, $k;
143 { valueWalk ($rest) }
152 foreach my $ver ( sort { $a <=> $b } keys %v_list ) {
153 foreach my $name (@{ $v_list{$ver} } ) {
154 $ValueToName{ $index } = [ uc $name, $ver ] ;
155 $NameToValue{ uc $name } = $index ++ ;
162 ###########################################################################
170 foreach $k (sort keys %$tre) {
172 die "duplicate key $k\n" if defined $list{$k} ;
173 die "Can't find key '$k'"
174 if ! defined $NameToValue{uc $k} ;
175 push @{ $list{$k} }, $NameToValue{uc $k} ;
176 die "Value associated with key '$k' is not an ARRAY reference"
177 if !ref $v || ref $v ne 'ARRAY' ;
179 my ($ver, $rest) = @{ $v } ;
181 { push (@{ $list{$k} }, walk ($rest)) }
182 elsif ($rest == DEFAULT_ON)
183 { push @def, $NameToValue{uc $k} }
185 push @list, @{ $list{$k} } ;
191 ###########################################################################
198 for my $i (1 .. @a - 1) {
200 if $a[$i] == $a[$i - 1] + 1
201 && ($i >= @a - 1 || $a[$i] + 1 == $a[$i + 1] );
203 $out[-1] = $a[-1] if $out[-1] eq "..";
205 my $out = join(",",@out);
207 $out =~ s/,(\.\.,)+/../g ;
211 ###########################################################################
218 my $max = (sort {$a <=> $b} map { length $_ } keys %$tre)[-1] ;
219 my @keys = sort keys %$tre ;
223 while ($k = shift @keys) {
225 die "Value associated with key '$k' is not an ARRAY reference"
226 if !ref $v || ref $v ne 'ARRAY' ;
230 $rv .= $prefix . "|\n" ;
231 $rv .= $prefix . "+- $k" ;
232 $offset = ' ' x ($max + 4) ;
235 $rv .= $prefix . "$k" ;
236 $offset = ' ' x ($max + 1) ;
239 my ($ver, $rest) = @{ $v } ;
242 my $bar = @keys ? "|" : " ";
243 $rv .= " -" . "-" x ($max - length $k ) . "+\n" ;
244 $rv .= warningsTree ($rest, $prefix . $bar . $offset )
253 ###########################################################################
257 my ($f, $max, @a) = @_ ;
258 my $mask = "\x00" x $max ;
262 vec($mask, $_, 1) = 1 ;
265 foreach (unpack("C*", $mask)) {
267 $string .= '\x' . sprintf("%2.2x", $_)
270 $string .= '\\' . sprintf("%o", $_)
279 return mkHexOct("x", $max, @a);
285 return mkHexOct("o", $max, @a);
288 ###########################################################################
290 if (@ARGV && $ARGV[0] eq "tree")
292 print warningsTree($tree, " ") ;
296 my ($warn, $pm) = map {
297 open_new($_, '>', { by => 'regen/warnings.pl' });
298 } 'warnings.h', 'lib/warnings.pm';
300 my ($index, $warn_size);
303 # generate warnings.h
307 #define Off(x) ((x) / 8)
308 #define Bit(x) (1 << ((x) % 8))
309 #define IsSet(a, x) ((a)[Off(x)] & Bit(x))
312 #define G_WARN_OFF 0 /* $^W == 0 */
313 #define G_WARN_ON 1 /* -w flag and $^W != 0 */
314 #define G_WARN_ALL_ON 2 /* -W flag */
315 #define G_WARN_ALL_OFF 4 /* -X flag */
316 #define G_WARN_ONCE 8 /* set if 'once' ever enabled */
317 #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF)
319 #define pWARN_STD NULL
320 #define pWARN_ALL (((STRLEN*)0)+1) /* use warnings 'all' */
321 #define pWARN_NONE (((STRLEN*)0)+2) /* no warnings 'all' */
323 #define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \
326 /* if PL_warnhook is set to this value, then warnings die */
327 #define PERL_WARNHOOK_FATAL (&PL_sv_placeholder)
333 $index = orderValues();
335 die <<EOM if $index > 255 ;
336 Too many warnings categories -- max is 255
337 rewrite packWARN* & unpackWARN* macros
343 $warn_size = int($index / 8) + ($index % 8 != 0) ;
347 foreach $k (sort { $a <=> $b } keys %ValueToName) {
348 my ($name, $version) = @{ $ValueToName{$k} };
349 print $warn "\n/* Warnings Categories added in Perl $version */\n\n"
350 if $last_ver != $version ;
352 print $warn tab(6, "#define WARN_$name"), " $k\n" ;
353 $last_ver = $version ;
357 print $warn tab(6, '#define WARNsize'), " $warn_size\n" ;
358 print $warn tab(6, '#define WARN_ALLstring'), ' "', ('\125' x $warn_size) , "\"\n" ;
359 print $warn tab(6, '#define WARN_NONEstring'), ' "', ('\0' x $warn_size) , "\"\n" ;
363 #define isLEXWARN_on (PL_curcop->cop_warnings != pWARN_STD)
364 #define isLEXWARN_off (PL_curcop->cop_warnings == pWARN_STD)
365 #define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
366 #define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)))
367 #define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
369 #define DUP_WARNINGS(p) \
370 (specialWARN(p) ? (STRLEN*)(p) \
371 : (STRLEN*)CopyD(p, PerlMemShared_malloc(sizeof(*p)+*p), sizeof(*p)+*p, \
374 #define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
376 /* The w1, w2 ... should be independent warnings categories; one shouldn't be
377 * a subcategory of any other */
379 #define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
380 #define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
381 #define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
383 #define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
384 #define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
385 #define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
386 #define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
390 #define packWARN(a) (a )
392 /* The a, b, ... should be independent warnings categories; one shouldn't be
393 * a subcategory of any other */
395 #define packWARN2(a,b) ((a) | ((b)<<8) )
396 #define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
397 #define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
399 #define unpackWARN1(x) ((x) & 0xFF)
400 #define unpackWARN2(x) (((x) >>8) & 0xFF)
401 #define unpackWARN3(x) (((x) >>16) & 0xFF)
402 #define unpackWARN4(x) (((x) >>24) & 0xFF)
405 ( ! specialWARN(PL_curcop->cop_warnings) && \
406 ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) || \
407 isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \
408 isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \
409 isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \
410 isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))
412 /* end of file warnings.h */
415 read_only_bottom_close_and_rename($warn);
419 last if /^KEYWORDS$/ ;
424 print $pm "our %Offsets = (" ;
425 foreach my $k (sort { $a <=> $b } keys %ValueToName) {
426 my ($name, $version) = @{ $ValueToName{$k} };
429 if ( $last_ver != $version ) {
431 print $pm tab(6, " # Warnings Categories added in Perl $version");
434 print $pm tab(6, " '$name'"), "=> $k,\n" ;
435 $last_ver = $version;
440 print $pm "our %Bits = (\n" ;
441 foreach my $k (sort keys %list) {
444 my @list = sort { $a <=> $b } @$v ;
446 print $pm tab(6, " '$k'"), '=> "',
447 mkHex($warn_size, map $_ * 2 , @list),
448 '", # [', mkRange(@list), "]\n" ;
453 print $pm "our %DeadBits = (\n" ;
454 foreach my $k (sort keys %list) {
457 my @list = sort { $a <=> $b } @$v ;
459 print $pm tab(6, " '$k'"), '=> "',
460 mkHex($warn_size, map $_ * 2 + 1 , @list),
461 '", # [', mkRange(@list), "]\n" ;
465 print $pm "# These are used by various things, including our own tests\n";
466 print $pm tab(6, 'our $NONE'), '= "', ('\0' x $warn_size) , "\";\n" ;
467 print $pm tab(6, 'our $DEFAULT'), '= "', mkHex($warn_size, map $_ * 2, @def),
468 '", # [', mkRange(@def), "]\n" ;
469 print $pm tab(6, 'our $LAST_BIT'), '= ' . "$index ;\n" ;
470 print $pm tab(6, 'our $BYTES'), '= ' . "$warn_size ;\n" ;
472 if ($_ eq "=for warnings.pl tree-goes-here\n") {
473 print $pm warningsTree($tree, " ");
479 read_only_bottom_close_and_rename($pm);
484 our $VERSION = '1.33';
486 # Verify that we're called correctly so that warnings will work.
487 # see also strict.pm.
488 unless ( __FILE__ =~ /(^|[\/\\])\Q${\__PACKAGE__}\E\.pmc?$/ ) {
489 my (undef, $f, $l) = caller;
490 die("Incorrect use of pragma '${\__PACKAGE__}' at $f line $l.\n");
495 our $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
499 require Carp; # this initializes %CarpInternal
500 local $Carp::CarpInternal{'warnings'};
501 delete $Carp::CarpInternal{'warnings'};
511 foreach my $word ( @_ ) {
512 if ($word eq 'FATAL') {
516 elsif ($word eq 'NONFATAL') {
520 elsif ($catmask = $Bits{$word}) {
522 $mask |= $DeadBits{$word} if $fatal ;
523 $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
526 { Croaker("Unknown warnings category '$word'")}
534 # called from B::Deparse.pm
535 push @_, 'all' unless @_ ;
536 return _bits(undef, @_) ;
543 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
545 if (vec($mask, $Offsets{'all'}, 1)) {
546 $mask |= $Bits{'all'} ;
547 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
550 # append 'all' when implied (after a lone "FATAL" or "NONFATAL")
551 push @_, 'all' if @_==1 && ( $_[0] eq 'FATAL' || $_[0] eq 'NONFATAL' );
553 # Empty @_ is equivalent to @_ = 'all' ;
554 ${^WARNING_BITS} = @_ ? _bits($mask, @_) : $mask | $Bits{all} ;
562 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
564 if (vec($mask, $Offsets{'all'}, 1)) {
565 $mask |= $Bits{'all'} ;
566 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
569 # append 'all' when implied (empty import list or after a lone "FATAL")
570 push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
572 foreach my $word ( @_ ) {
573 if ($word eq 'FATAL') {
576 elsif ($catmask = $Bits{$word}) {
577 $mask &= ~($catmask | $DeadBits{$word} | $All);
580 { Croaker("Unknown warnings category '$word'")}
583 ${^WARNING_BITS} = $mask ;
586 my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
588 sub MESSAGE () { 4 };
598 my $has_message = $wanted & MESSAGE;
600 unless (@_ == 1 || @_ == ($has_message ? 2 : 0)) {
601 my $sub = (caller 1)[3];
602 my $syntax = $has_message ? "[category,] 'message'" : '[category]';
603 Croaker("Usage: $sub($syntax)");
606 my $message = pop if $has_message;
609 # check the category supplied.
611 if (my $type = ref $category) {
612 Croaker("not an object")
613 if exists $builtin_type{$type};
617 $offset = $Offsets{$category};
618 Croaker("Unknown warnings category '$category'")
619 unless defined $offset;
622 $category = (caller(1))[0] ;
623 $offset = $Offsets{$category};
624 Croaker("package '$category' not registered for warnings")
625 unless defined $offset ;
633 while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
634 last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
639 $i = _error_loc(); # see where Carp will allocate the error
642 # Default to 0 if caller returns nothing. Default to $DEFAULT if it
643 # explicitly returns undef.
644 my(@callers_bitmask) = (caller($i))[9] ;
645 my $callers_bitmask =
646 @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
649 foreach my $type (FATAL, NORMAL) {
650 next unless $wanted & $type;
652 push @results, (vec($callers_bitmask, $offset + $type - 1, 1) ||
653 vec($callers_bitmask, $Offsets{'all'} + $type - 1, 1));
656 # &enabled and &fatal_enabled
657 return $results[0] unless $has_message;
659 # &warnif, and the category is neither enabled as warning nor as fatal
660 return if $wanted == (NORMAL | FATAL | MESSAGE)
661 && !($results[0] || $results[1]);
664 Carp::croak($message) if $results[0];
665 # will always get here for &warn. will only get here for &warnif if the
666 # category is enabled
667 Carp::carp($message);
675 vec($mask, $bit, 1) = 1;
679 sub register_categories
683 for my $name (@names) {
684 if (! defined $Bits{$name}) {
685 $Bits{$name} = _mkMask($LAST_BIT);
686 vec($Bits{'all'}, $LAST_BIT, 1) = 1;
687 $Offsets{$name} = $LAST_BIT ++;
688 foreach my $k (keys %Bits) {
689 vec($Bits{$k}, $LAST_BIT, 1) = 0;
691 $DeadBits{$name} = _mkMask($LAST_BIT);
692 vec($DeadBits{'all'}, $LAST_BIT++, 1) = 1;
699 goto &Carp::short_error_loc; # don't introduce another stack frame
704 return __chk(NORMAL, @_);
709 return __chk(FATAL, @_);
714 return __chk(FATAL | MESSAGE, @_);
719 return __chk(NORMAL | FATAL | MESSAGE, @_);
722 # These are not part of any public interface, so we can delete them to save
724 delete @warnings::{qw(NORMAL FATAL MESSAGE)};
730 warnings - Perl pragma to control optional warnings
740 use warnings::register;
741 if (warnings::enabled()) {
742 warnings::warn("some warning");
745 if (warnings::enabled("void")) {
746 warnings::warn("void", "some warning");
749 if (warnings::enabled($object)) {
750 warnings::warn($object, "some warning");
753 warnings::warnif("some warning");
754 warnings::warnif("void", "some warning");
755 warnings::warnif($object, "some warning");
759 The C<warnings> pragma gives control over which warnings are enabled in
760 which parts of a Perl program. It's a more flexible alternative for
761 both the command line flag B<-w> and the equivalent Perl variable,
764 This pragma works just like the C<strict> pragma.
765 This means that the scope of the warning pragma is limited to the
766 enclosing block. It also means that the pragma setting will not
767 leak across files (via C<use>, C<require> or C<do>). This allows
768 authors to independently define the degree of warning checks that will
769 be applied to their module.
771 By default, optional warnings are disabled, so any legacy code that
772 doesn't attempt to control the warnings will work unchanged.
774 All warnings are enabled in a block by either of these:
779 Similarly all warnings are disabled in a block by either of these:
784 For example, consider the code below:
794 The code in the enclosing block has warnings enabled, but the inner
795 block has them disabled. In this case that means the assignment to the
796 scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
797 warning, but the assignment to the scalar C<$b> will not.
799 =head2 Default Warnings and Optional Warnings
801 Before the introduction of lexical warnings, Perl had two classes of
802 warnings: mandatory and optional.
804 As its name suggests, if your code tripped a mandatory warning, you
805 would get a warning whether you wanted it or not.
806 For example, the code below would always produce an C<"isn't numeric">
807 warning about the "2:".
811 With the introduction of lexical warnings, mandatory warnings now become
812 I<default> warnings. The difference is that although the previously
813 mandatory warnings are still enabled by default, they can then be
814 subsequently enabled or disabled with the lexical warning pragma. For
815 example, in the code below, an C<"isn't numeric"> warning will only
816 be reported for the C<$a> variable.
822 Note that neither the B<-w> flag or the C<$^W> can be used to
823 disable/enable default warnings. They are still mandatory in this case.
825 =head2 What's wrong with B<-w> and C<$^W>
827 Although very useful, the big problem with using B<-w> on the command
828 line to enable warnings is that it is all or nothing. Take the typical
829 scenario when you are writing a Perl program. Parts of the code you
830 will write yourself, but it's very likely that you will make use of
831 pre-written Perl modules. If you use the B<-w> flag in this case, you
832 end up enabling warnings in pieces of code that you haven't written.
834 Similarly, using C<$^W> to either disable or enable blocks of code is
835 fundamentally flawed. For a start, say you want to disable warnings in
836 a block of code. You might expect this to be enough to do the trick:
844 When this code is run with the B<-w> flag, a warning will be produced
845 for the C<$a> line: C<"Reversed += operator">.
847 The problem is that Perl has both compile-time and run-time warnings. To
848 disable compile-time warnings you need to rewrite the code like this:
856 The other big problem with C<$^W> is the way you can inadvertently
857 change the warning setting in unexpected places in your code. For example,
858 when the code below is run (without the B<-w> flag), the second call
859 to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas
874 This is a side-effect of C<$^W> being dynamically scoped.
876 Lexical warnings get around these limitations by allowing finer control
877 over where warnings can or can't be tripped.
879 =head2 Controlling Warnings from the Command Line
881 There are three Command Line flags that can be used to control when
882 warnings are (or aren't) produced:
889 This is the existing flag. If the lexical warnings pragma is B<not>
890 used in any of you code, or any of the modules that you use, this flag
891 will enable warnings everywhere. See L<Backward Compatibility> for
892 details of how this flag interacts with lexical warnings.
897 If the B<-W> flag is used on the command line, it will enable all warnings
898 throughout the program regardless of whether warnings were disabled
899 locally using C<no warnings> or C<$^W =0>.
900 This includes all files that get
901 included via C<use>, C<require> or C<do>.
902 Think of it as the Perl equivalent of the "lint" command.
907 Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
911 =head2 Backward Compatibility
913 If you are used to working with a version of Perl prior to the
914 introduction of lexically scoped warnings, or have code that uses both
915 lexical warnings and C<$^W>, this section will describe how they interact.
917 How Lexical Warnings interact with B<-w>/C<$^W>:
923 If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
924 control warnings is used and neither C<$^W> nor the C<warnings> pragma
925 are used, then default warnings will be enabled and optional warnings
927 This means that legacy code that doesn't attempt to control the warnings
932 The B<-w> flag just sets the global C<$^W> variable as in 5.005. This
933 means that any legacy code that currently relies on manipulating C<$^W>
934 to control warning behavior will still work as is.
938 Apart from now being a boolean, the C<$^W> variable operates in exactly
939 the same horrible uncontrolled global way, except that it cannot
940 disable/enable default warnings.
944 If a piece of code is under the control of the C<warnings> pragma,
945 both the C<$^W> variable and the B<-w> flag will be ignored for the
946 scope of the lexical warning.
950 The only way to override a lexical warnings setting is with the B<-W>
951 or B<-X> command line flags.
955 The combined effect of 3 & 4 is that it will allow code which uses
956 the C<warnings> pragma to control the warning behavior of $^W-type
957 code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
959 =head2 Category Hierarchy
960 X<warning, categories>
962 A hierarchy of "categories" have been defined to allow groups of warnings
963 to be enabled/disabled in isolation.
965 The current hierarchy is:
967 =for warnings.pl tree-goes-here
969 Just like the "strict" pragma any of these categories can be combined
971 use warnings qw(void redefine);
972 no warnings qw(io syntax untie);
974 Also like the "strict" pragma, if there is more than one instance of the
975 C<warnings> pragma in a given scope the cumulative effect is additive.
977 use warnings qw(void); # only "void" warnings enabled
979 use warnings qw(io); # only "void" & "io" warnings enabled
981 no warnings qw(void); # only "io" warnings enabled
983 To determine which category a specific warning has been assigned to see
986 Note: Before Perl 5.8.0, the lexical warnings category "deprecated" was a
987 sub-category of the "syntax" category. It is now a top-level category
990 Note: Before 5.21.0, the "missing" lexical warnings category was
991 internally defined to be the same as the "uninitialized" category. It
992 is now a top-level category in its own right.
994 =head2 Fatal Warnings
997 The presence of the word "FATAL" in the category list will escalate
998 warnings in those categories into fatal errors in that lexical scope.
1000 B<NOTE:> FATAL warnings should be used with care, particularly
1001 C<< FATAL => 'all' >>.
1003 Libraries using L<warnings::warn|/FUNCTIONS> for custom warning categories
1004 generally don't expect L<warnings::warn|/FUNCTIONS> to be fatal and can wind up
1005 in an unexpected state as a result. For XS modules issuing categorized
1006 warnings, such unanticipated exceptions could also expose memory leak bugs.
1008 Moreover, the Perl interpreter itself has had serious bugs involving
1009 fatalized warnings. For a summary of resolved and unresolved problems as
1010 of January 2015, please see
1011 L<this perl5-porters post|http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225235.html>.
1013 While some developers find fatalizing some warnings to be a useful
1014 defensive programming technique, using C<< FATAL => 'all' >> to fatalize
1015 all possible warning categories -- including custom ones -- is particularly
1016 risky. Therefore, the use of C<< FATAL => 'all' >> is
1017 L<discouraged|perlpolicy/discouraged>.
1019 The L<strictures|strictures/VERSION-2> module on CPAN offers one example of
1020 a warnings subset that the module's authors believe is relatively safe to
1023 B<NOTE:> users of FATAL warnings, especially those using
1024 C<< FATAL => 'all' >>, should be fully aware that they are risking future
1025 portability of their programs by doing so. Perl makes absolutely no
1026 commitments to not introduce new warnings or warnings categories in the
1027 future; indeed, we explicitly reserve the right to do so. Code that may
1028 not warn now may warn in a future release of Perl if the Perl5 development
1029 team deems it in the best interests of the community to do so. Should code
1030 using FATAL warnings break due to the introduction of a new warning we will
1031 NOT consider it an incompatible change. Users of FATAL warnings should
1032 take special caution during upgrades to check to see if their code triggers
1033 any new warnings and should pay particular attention to the fine print of
1034 the documentation of the features they use to ensure they do not exploit
1035 features that are documented as risky, deprecated, or unspecified, or where
1036 the documentation says "so don't do that", or anything with the same sense
1037 and spirit. Use of such features in combination with FATAL warnings is
1038 ENTIRELY AT THE USER'S RISK.
1040 The following documentation describes how to use FATAL warnings but the
1041 perl5 porters strongly recommend that you understand the risks before doing
1042 so, especially for library code intended for use by others, as there is no
1043 way for downstream users to change the choice of fatal categories.
1045 In the code below, the use of C<time>, C<length>
1046 and C<join> can all produce a C<"Useless use of xxx in void context">
1054 use warnings FATAL => qw(void);
1062 When run it produces this output
1064 Useless use of time in void context at fatal line 3.
1065 Useless use of length in void context at fatal line 7.
1067 The scope where C<length> is used has escalated the C<void> warnings
1068 category into a fatal error, so the program terminates immediately when it
1069 encounters the warning.
1071 To explicitly turn off a "FATAL" warning you just disable the warning
1072 it is associated with. So, for example, to disable the "void" warning
1073 in the example above, either of these will do the trick:
1075 no warnings qw(void);
1076 no warnings FATAL => qw(void);
1078 If you want to downgrade a warning that has been escalated into a fatal
1079 error back to a normal warning, you can use the "NONFATAL" keyword. For
1080 example, the code below will promote all warnings into fatal errors,
1081 except for those in the "syntax" category.
1083 use warnings FATAL => 'all', NONFATAL => 'syntax';
1085 As of Perl 5.20, instead of C<< use warnings FATAL => 'all'; >> you can
1088 use v5.20; # Perl 5.20 or greater is required for the following
1089 use warnings 'FATAL'; # short form of "use warnings FATAL => 'all';"
1091 If you want your program to be compatible with versions of Perl before
1092 5.20, you must use C<< use warnings FATAL => 'all'; >> instead. (In
1093 previous versions of Perl, the behavior of the statements
1094 C<< use warnings 'FATAL'; >>, C<< use warnings 'NONFATAL'; >> and
1095 C<< no warnings 'FATAL'; >> was unspecified; they did not behave as if
1096 they included the C<< => 'all' >> portion. As of 5.20, they do.)
1098 =head2 Reporting Warnings from a Module
1099 X<warning, reporting> X<warning, registering>
1101 The C<warnings> pragma provides a number of functions that are useful for
1102 module authors. These are used when you want to report a module-specific
1103 warning to a calling module has enabled warnings via the C<warnings>
1106 Consider the module C<MyMod::Abc> below.
1110 use warnings::register;
1114 if ($path !~ m#^/#) {
1115 warnings::warn("changing relative path to /var/abc")
1116 if warnings::enabled();
1117 $path = "/var/abc/$path";
1123 The call to C<warnings::register> will create a new warnings category
1124 called "MyMod::Abc", i.e. the new category name matches the current
1125 package name. The C<open> function in the module will display a warning
1126 message if it gets given a relative path as a parameter. This warnings
1127 will only be displayed if the code that uses C<MyMod::Abc> has actually
1128 enabled them with the C<warnings> pragma like below.
1131 use warnings 'MyMod::Abc';
1133 abc::open("../fred.txt");
1135 It is also possible to test whether the pre-defined warnings categories are
1136 set in the calling module with the C<warnings::enabled> function. Consider
1137 this snippet of code:
1142 warnings::warnif("deprecated",
1143 "open is deprecated, use new instead");
1151 The function C<open> has been deprecated, so code has been included to
1152 display a warning message whenever the calling module has (at least) the
1153 "deprecated" warnings category enabled. Something like this, say.
1155 use warnings 'deprecated';
1158 MyMod::Abc::open($filename);
1160 Either the C<warnings::warn> or C<warnings::warnif> function should be
1161 used to actually display the warnings message. This is because they can
1162 make use of the feature that allows warnings to be escalated into fatal
1163 errors. So in this case
1166 use warnings FATAL => 'MyMod::Abc';
1168 MyMod::Abc::open('../fred.txt');
1170 the C<warnings::warnif> function will detect this and die after
1171 displaying the warning message.
1173 The three warnings functions, C<warnings::warn>, C<warnings::warnif>
1174 and C<warnings::enabled> can optionally take an object reference in place
1175 of a category name. In this case the functions will use the class name
1176 of the object as the warnings category.
1178 Consider this example:
1183 use warnings::register;
1196 if ($value % 2 && warnings::enabled($self))
1197 { warnings::warn($self, "Odd numbers are unsafe") }
1204 $self->check($value);
1212 use warnings::register;
1214 our @ISA = qw( Original );
1224 The code below makes use of both modules, but it only enables warnings from
1229 use warnings 'Derived';
1230 my $a = Original->new();
1232 my $b = Derived->new();
1235 When this code is run only the C<Derived> object, C<$b>, will generate
1238 Odd numbers are unsafe at main.pl line 7
1240 Notice also that the warning is reported at the line where the object is first
1243 When registering new categories of warning, you can supply more names to
1244 warnings::register like this:
1247 use warnings::register qw(format precision);
1251 warnings::warnif('MyModule::format', '...');
1257 =item use warnings::register
1259 Creates a new warnings category with the same name as the package where
1260 the call to the pragma is used.
1262 =item warnings::enabled()
1264 Use the warnings category with the same name as the current package.
1266 Return TRUE if that warnings category is enabled in the calling module.
1267 Otherwise returns FALSE.
1269 =item warnings::enabled($category)
1271 Return TRUE if the warnings category, C<$category>, is enabled in the
1273 Otherwise returns FALSE.
1275 =item warnings::enabled($object)
1277 Use the name of the class for the object reference, C<$object>, as the
1280 Return TRUE if that warnings category is enabled in the first scope
1281 where the object is used.
1282 Otherwise returns FALSE.
1284 =item warnings::fatal_enabled()
1286 Return TRUE if the warnings category with the same name as the current
1287 package has been set to FATAL in the calling module.
1288 Otherwise returns FALSE.
1290 =item warnings::fatal_enabled($category)
1292 Return TRUE if the warnings category C<$category> has been set to FATAL in
1294 Otherwise returns FALSE.
1296 =item warnings::fatal_enabled($object)
1298 Use the name of the class for the object reference, C<$object>, as the
1301 Return TRUE if that warnings category has been set to FATAL in the first
1302 scope where the object is used.
1303 Otherwise returns FALSE.
1305 =item warnings::warn($message)
1307 Print C<$message> to STDERR.
1309 Use the warnings category with the same name as the current package.
1311 If that warnings category has been set to "FATAL" in the calling module
1312 then die. Otherwise return.
1314 =item warnings::warn($category, $message)
1316 Print C<$message> to STDERR.
1318 If the warnings category, C<$category>, has been set to "FATAL" in the
1319 calling module then die. Otherwise return.
1321 =item warnings::warn($object, $message)
1323 Print C<$message> to STDERR.
1325 Use the name of the class for the object reference, C<$object>, as the
1328 If that warnings category has been set to "FATAL" in the scope where C<$object>
1329 is first used then die. Otherwise return.
1332 =item warnings::warnif($message)
1336 if (warnings::enabled())
1337 { warnings::warn($message) }
1339 =item warnings::warnif($category, $message)
1343 if (warnings::enabled($category))
1344 { warnings::warn($category, $message) }
1346 =item warnings::warnif($object, $message)
1350 if (warnings::enabled($object))
1351 { warnings::warn($object, $message) }
1353 =item warnings::register_categories(@names)
1355 This registers warning categories for the given names and is primarily for
1356 use by the warnings::register pragma.
1360 See also L<perlmodlib/Pragmatic Modules> and L<perldiag>.