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::autoderef' =>
99 [ 5.019, DEFAULT_ON ],
100 'experimental::signatures' =>
101 [ 5.019, DEFAULT_ON ],
102 'experimental::win32_perlio' =>
103 [ 5.021, DEFAULT_ON ],
104 'experimental::refaliasing' =>
105 [ 5.021, DEFAULT_ON ],
106 'experimental::re_strict' =>
107 [ 5.021, DEFAULT_ON ],
108 'experimental::const_attr' =>
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.31';
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 any
998 warnings detected from the categories specified in the lexical scope
999 into fatal errors. In the code below, the use of C<time>, C<length>
1000 and C<join> can all produce a C<"Useless use of xxx in void context">
1008 use warnings FATAL => qw(void);
1016 When run it produces this output
1018 Useless use of time in void context at fatal line 3.
1019 Useless use of length in void context at fatal line 7.
1021 The scope where C<length> is used has escalated the C<void> warnings
1022 category into a fatal error, so the program terminates immediately when it
1023 encounters the warning.
1025 To explicitly turn off a "FATAL" warning you just disable the warning
1026 it is associated with. So, for example, to disable the "void" warning
1027 in the example above, either of these will do the trick:
1029 no warnings qw(void);
1030 no warnings FATAL => qw(void);
1032 If you want to downgrade a warning that has been escalated into a fatal
1033 error back to a normal warning, you can use the "NONFATAL" keyword. For
1034 example, the code below will promote all warnings into fatal errors,
1035 except for those in the "syntax" category.
1037 use warnings FATAL => 'all', NONFATAL => 'syntax';
1039 As of Perl 5.20, instead of C<< use warnings FATAL => 'all'; >> you can
1042 use v5.20; # Perl 5.20 or greater is required for the following
1043 use warnings 'FATAL'; # short form of "use warnings FATAL => 'all';"
1045 If you want your program to be compatible with versions of Perl before
1046 5.20, you must use C<< use warnings FATAL => 'all'; >> instead. (In
1047 previous versions of Perl, the behavior of the statements
1048 C<< use warnings 'FATAL'; >>, C<< use warnings 'NONFATAL'; >> and
1049 C<< no warnings 'FATAL'; >> was unspecified; they did not behave as if
1050 they included the C<< => 'all' >> portion. As of 5.20, they do.)
1052 B<NOTE:> Users of FATAL warnings, especially
1053 those using C<< FATAL => 'all' >>
1054 should be fully aware that they are risking future portability of their
1055 programs by doing so. Perl makes absolutely no commitments to not
1056 introduce new warnings, or warnings categories in the future, and indeed
1057 we explicitly reserve the right to do so. Code that may not warn now may
1058 warn in a future release of Perl if the Perl5 development team deems it
1059 in the best interests of the community to do so. Should code using FATAL
1060 warnings break due to the introduction of a new warning we will NOT
1061 consider it an incompatible change. Users of FATAL warnings should take
1062 special caution during upgrades to check to see if their code triggers
1063 any new warnings and should pay particular attention to the fine print of
1064 the documentation of the features they use to ensure they do not exploit
1065 features that are documented as risky, deprecated, or unspecified, or where
1066 the documentation says "so don't do that", or anything with the same sense
1067 and spirit. Use of such features in combination with FATAL warnings is
1068 ENTIRELY AT THE USER'S RISK.
1070 =head2 Reporting Warnings from a Module
1071 X<warning, reporting> X<warning, registering>
1073 The C<warnings> pragma provides a number of functions that are useful for
1074 module authors. These are used when you want to report a module-specific
1075 warning to a calling module has enabled warnings via the C<warnings>
1078 Consider the module C<MyMod::Abc> below.
1082 use warnings::register;
1086 if ($path !~ m#^/#) {
1087 warnings::warn("changing relative path to /var/abc")
1088 if warnings::enabled();
1089 $path = "/var/abc/$path";
1095 The call to C<warnings::register> will create a new warnings category
1096 called "MyMod::Abc", i.e. the new category name matches the current
1097 package name. The C<open> function in the module will display a warning
1098 message if it gets given a relative path as a parameter. This warnings
1099 will only be displayed if the code that uses C<MyMod::Abc> has actually
1100 enabled them with the C<warnings> pragma like below.
1103 use warnings 'MyMod::Abc';
1105 abc::open("../fred.txt");
1107 It is also possible to test whether the pre-defined warnings categories are
1108 set in the calling module with the C<warnings::enabled> function. Consider
1109 this snippet of code:
1114 warnings::warnif("deprecated",
1115 "open is deprecated, use new instead");
1123 The function C<open> has been deprecated, so code has been included to
1124 display a warning message whenever the calling module has (at least) the
1125 "deprecated" warnings category enabled. Something like this, say.
1127 use warnings 'deprecated';
1130 MyMod::Abc::open($filename);
1132 Either the C<warnings::warn> or C<warnings::warnif> function should be
1133 used to actually display the warnings message. This is because they can
1134 make use of the feature that allows warnings to be escalated into fatal
1135 errors. So in this case
1138 use warnings FATAL => 'MyMod::Abc';
1140 MyMod::Abc::open('../fred.txt');
1142 the C<warnings::warnif> function will detect this and die after
1143 displaying the warning message.
1145 The three warnings functions, C<warnings::warn>, C<warnings::warnif>
1146 and C<warnings::enabled> can optionally take an object reference in place
1147 of a category name. In this case the functions will use the class name
1148 of the object as the warnings category.
1150 Consider this example:
1155 use warnings::register;
1168 if ($value % 2 && warnings::enabled($self))
1169 { warnings::warn($self, "Odd numbers are unsafe") }
1176 $self->check($value);
1184 use warnings::register;
1186 our @ISA = qw( Original );
1196 The code below makes use of both modules, but it only enables warnings from
1201 use warnings 'Derived';
1202 my $a = Original->new();
1204 my $b = Derived->new();
1207 When this code is run only the C<Derived> object, C<$b>, will generate
1210 Odd numbers are unsafe at main.pl line 7
1212 Notice also that the warning is reported at the line where the object is first
1215 When registering new categories of warning, you can supply more names to
1216 warnings::register like this:
1219 use warnings::register qw(format precision);
1223 warnings::warnif('MyModule::format', '...');
1229 =item use warnings::register
1231 Creates a new warnings category with the same name as the package where
1232 the call to the pragma is used.
1234 =item warnings::enabled()
1236 Use the warnings category with the same name as the current package.
1238 Return TRUE if that warnings category is enabled in the calling module.
1239 Otherwise returns FALSE.
1241 =item warnings::enabled($category)
1243 Return TRUE if the warnings category, C<$category>, is enabled in the
1245 Otherwise returns FALSE.
1247 =item warnings::enabled($object)
1249 Use the name of the class for the object reference, C<$object>, as the
1252 Return TRUE if that warnings category is enabled in the first scope
1253 where the object is used.
1254 Otherwise returns FALSE.
1256 =item warnings::fatal_enabled()
1258 Return TRUE if the warnings category with the same name as the current
1259 package has been set to FATAL in the calling module.
1260 Otherwise returns FALSE.
1262 =item warnings::fatal_enabled($category)
1264 Return TRUE if the warnings category C<$category> has been set to FATAL in
1266 Otherwise returns FALSE.
1268 =item warnings::fatal_enabled($object)
1270 Use the name of the class for the object reference, C<$object>, as the
1273 Return TRUE if that warnings category has been set to FATAL in the first
1274 scope where the object is used.
1275 Otherwise returns FALSE.
1277 =item warnings::warn($message)
1279 Print C<$message> to STDERR.
1281 Use the warnings category with the same name as the current package.
1283 If that warnings category has been set to "FATAL" in the calling module
1284 then die. Otherwise return.
1286 =item warnings::warn($category, $message)
1288 Print C<$message> to STDERR.
1290 If the warnings category, C<$category>, has been set to "FATAL" in the
1291 calling module then die. Otherwise return.
1293 =item warnings::warn($object, $message)
1295 Print C<$message> to STDERR.
1297 Use the name of the class for the object reference, C<$object>, as the
1300 If that warnings category has been set to "FATAL" in the scope where C<$object>
1301 is first used then die. Otherwise return.
1304 =item warnings::warnif($message)
1308 if (warnings::enabled())
1309 { warnings::warn($message) }
1311 =item warnings::warnif($category, $message)
1315 if (warnings::enabled($category))
1316 { warnings::warn($category, $message) }
1318 =item warnings::warnif($object, $message)
1322 if (warnings::enabled($object))
1323 { warnings::warn($object, $message) }
1325 =item warnings::register_categories(@names)
1327 This registers warning categories for the given names and is primarily for
1328 use by the warnings::register pragma.
1332 See also L<perlmodlib/Pragmatic Modules> and L<perldiag>.