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 ],
108 'experimental::declared_refs' =>
109 [ 5.025, 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 \
364 cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD)
365 #define isLEXWARN_off \
366 cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD)
367 #define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
368 #define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)))
369 #define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
371 #define DUP_WARNINGS(p) \
372 (specialWARN(p) ? (STRLEN*)(p) \
373 : (STRLEN*)CopyD(p, PerlMemShared_malloc(sizeof(*p)+*p), sizeof(*p)+*p, \
376 #define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
378 /* The w1, w2 ... should be independent warnings categories; one shouldn't be
379 * a subcategory of any other */
381 #define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
382 #define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
383 #define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
385 #define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
386 #define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
387 #define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
388 #define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
392 #define packWARN(a) (a )
394 /* The a, b, ... should be independent warnings categories; one shouldn't be
395 * a subcategory of any other */
397 #define packWARN2(a,b) ((a) | ((b)<<8) )
398 #define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
399 #define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
401 #define unpackWARN1(x) ((x) & 0xFF)
402 #define unpackWARN2(x) (((x) >>8) & 0xFF)
403 #define unpackWARN3(x) (((x) >>16) & 0xFF)
404 #define unpackWARN4(x) (((x) >>24) & 0xFF)
407 ( ! specialWARN(PL_curcop->cop_warnings) && \
408 ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) || \
409 isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \
410 isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \
411 isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \
412 isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))
414 /* end of file warnings.h */
417 read_only_bottom_close_and_rename($warn);
421 last if /^VERSION$/ ;
425 print $pm qq(our \$VERSION = "$::VERSION";\n);
428 last if /^KEYWORDS$/ ;
433 print $pm "our %Offsets = (" ;
434 foreach my $k (sort { $a <=> $b } keys %ValueToName) {
435 my ($name, $version) = @{ $ValueToName{$k} };
438 if ( $last_ver != $version ) {
440 print $pm tab(6, " # Warnings Categories added in Perl $version");
443 print $pm tab(6, " '$name'"), "=> $k,\n" ;
444 $last_ver = $version;
449 print $pm "our %Bits = (\n" ;
450 foreach my $k (sort keys %list) {
453 my @list = sort { $a <=> $b } @$v ;
455 print $pm tab(6, " '$k'"), '=> "',
456 mkHex($warn_size, map $_ * 2 , @list),
457 '", # [', mkRange(@list), "]\n" ;
462 print $pm "our %DeadBits = (\n" ;
463 foreach my $k (sort keys %list) {
466 my @list = sort { $a <=> $b } @$v ;
468 print $pm tab(6, " '$k'"), '=> "',
469 mkHex($warn_size, map $_ * 2 + 1 , @list),
470 '", # [', mkRange(@list), "]\n" ;
474 print $pm "# These are used by various things, including our own tests\n";
475 print $pm tab(6, 'our $NONE'), '= "', ('\0' x $warn_size) , "\";\n" ;
476 print $pm tab(6, 'our $DEFAULT'), '= "', mkHex($warn_size, map $_ * 2, @def),
477 '", # [', mkRange(sort { $a <=> $b } @def), "]\n" ;
478 print $pm tab(6, 'our $LAST_BIT'), '= ' . "$index ;\n" ;
479 print $pm tab(6, 'our $BYTES'), '= ' . "$warn_size ;\n" ;
481 if ($_ eq "=for warnings.pl tree-goes-here\n") {
482 print $pm warningsTree($tree, " ");
488 read_only_bottom_close_and_rename($pm);
495 # Verify that we're called correctly so that warnings will work.
496 # Can't use Carp, since Carp uses us!
497 # String regexps because constant folding = smaller optree = less memory vs regexp literal
498 # see also strict.pm.
499 die sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2]
500 if __FILE__ !~ ( '(?x) \b '.__PACKAGE__.' \.pmc? \z' )
501 && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' );
505 our $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
509 require Carp; # this initializes %CarpInternal
510 local $Carp::CarpInternal{'warnings'};
511 delete $Carp::CarpInternal{'warnings'};
521 foreach my $word ( @_ ) {
522 if ($word eq 'FATAL') {
526 elsif ($word eq 'NONFATAL') {
530 elsif ($catmask = $Bits{$word}) {
532 $mask |= $DeadBits{$word} if $fatal ;
533 $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
536 { Croaker("Unknown warnings category '$word'")}
544 # called from B::Deparse.pm
545 push @_, 'all' unless @_ ;
546 return _bits(undef, @_) ;
553 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
555 if (vec($mask, $Offsets{'all'}, 1)) {
556 $mask |= $Bits{'all'} ;
557 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
560 # append 'all' when implied (after a lone "FATAL" or "NONFATAL")
561 push @_, 'all' if @_==1 && ( $_[0] eq 'FATAL' || $_[0] eq 'NONFATAL' );
563 # Empty @_ is equivalent to @_ = 'all' ;
564 ${^WARNING_BITS} = @_ ? _bits($mask, @_) : $mask | $Bits{all} ;
572 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
574 if (vec($mask, $Offsets{'all'}, 1)) {
575 $mask |= $Bits{'all'} ;
576 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
579 # append 'all' when implied (empty import list or after a lone "FATAL")
580 push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
582 foreach my $word ( @_ ) {
583 if ($word eq 'FATAL') {
586 elsif ($catmask = $Bits{$word}) {
587 $mask &= ~($catmask | $DeadBits{$word} | $All);
590 { Croaker("Unknown warnings category '$word'")}
593 ${^WARNING_BITS} = $mask ;
596 my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
598 sub MESSAGE () { 4 };
608 my $has_message = $wanted & MESSAGE;
610 unless (@_ == 1 || @_ == ($has_message ? 2 : 0)) {
611 my $sub = (caller 1)[3];
612 my $syntax = $has_message ? "[category,] 'message'" : '[category]';
613 Croaker("Usage: $sub($syntax)");
616 my $message = pop if $has_message;
619 # check the category supplied.
621 if (my $type = ref $category) {
622 Croaker("not an object")
623 if exists $builtin_type{$type};
627 $offset = $Offsets{$category};
628 Croaker("Unknown warnings category '$category'")
629 unless defined $offset;
632 $category = (caller(1))[0] ;
633 $offset = $Offsets{$category};
634 Croaker("package '$category' not registered for warnings")
635 unless defined $offset ;
643 while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
644 last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
649 $i = _error_loc(); # see where Carp will allocate the error
652 # Default to 0 if caller returns nothing. Default to $DEFAULT if it
653 # explicitly returns undef.
654 my(@callers_bitmask) = (caller($i))[9] ;
655 my $callers_bitmask =
656 @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
659 foreach my $type (FATAL, NORMAL) {
660 next unless $wanted & $type;
662 push @results, (vec($callers_bitmask, $offset + $type - 1, 1) ||
663 vec($callers_bitmask, $Offsets{'all'} + $type - 1, 1));
666 # &enabled and &fatal_enabled
667 return $results[0] unless $has_message;
669 # &warnif, and the category is neither enabled as warning nor as fatal
670 return if $wanted == (NORMAL | FATAL | MESSAGE)
671 && !($results[0] || $results[1]);
674 Carp::croak($message) if $results[0];
675 # will always get here for &warn. will only get here for &warnif if the
676 # category is enabled
677 Carp::carp($message);
685 vec($mask, $bit, 1) = 1;
689 sub register_categories
693 for my $name (@names) {
694 if (! defined $Bits{$name}) {
695 $Bits{$name} = _mkMask($LAST_BIT);
696 vec($Bits{'all'}, $LAST_BIT, 1) = 1;
697 $Offsets{$name} = $LAST_BIT ++;
698 foreach my $k (keys %Bits) {
699 vec($Bits{$k}, $LAST_BIT, 1) = 0;
701 $DeadBits{$name} = _mkMask($LAST_BIT);
702 vec($DeadBits{'all'}, $LAST_BIT++, 1) = 1;
709 goto &Carp::short_error_loc; # don't introduce another stack frame
714 return __chk(NORMAL, @_);
719 return __chk(FATAL, @_);
724 return __chk(FATAL | MESSAGE, @_);
729 return __chk(NORMAL | FATAL | MESSAGE, @_);
732 # These are not part of any public interface, so we can delete them to save
734 delete @warnings::{qw(NORMAL FATAL MESSAGE)};
740 warnings - Perl pragma to control optional warnings
750 use warnings::register;
751 if (warnings::enabled()) {
752 warnings::warn("some warning");
755 if (warnings::enabled("void")) {
756 warnings::warn("void", "some warning");
759 if (warnings::enabled($object)) {
760 warnings::warn($object, "some warning");
763 warnings::warnif("some warning");
764 warnings::warnif("void", "some warning");
765 warnings::warnif($object, "some warning");
769 The C<warnings> pragma gives control over which warnings are enabled in
770 which parts of a Perl program. It's a more flexible alternative for
771 both the command line flag B<-w> and the equivalent Perl variable,
774 This pragma works just like the C<strict> pragma.
775 This means that the scope of the warning pragma is limited to the
776 enclosing block. It also means that the pragma setting will not
777 leak across files (via C<use>, C<require> or C<do>). This allows
778 authors to independently define the degree of warning checks that will
779 be applied to their module.
781 By default, optional warnings are disabled, so any legacy code that
782 doesn't attempt to control the warnings will work unchanged.
784 All warnings are enabled in a block by either of these:
789 Similarly all warnings are disabled in a block by either of these:
794 For example, consider the code below:
804 The code in the enclosing block has warnings enabled, but the inner
805 block has them disabled. In this case that means the assignment to the
806 scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
807 warning, but the assignment to the scalar C<$b> will not.
809 =head2 Default Warnings and Optional Warnings
811 Before the introduction of lexical warnings, Perl had two classes of
812 warnings: mandatory and optional.
814 As its name suggests, if your code tripped a mandatory warning, you
815 would get a warning whether you wanted it or not.
816 For example, the code below would always produce an C<"isn't numeric">
817 warning about the "2:".
821 With the introduction of lexical warnings, mandatory warnings now become
822 I<default> warnings. The difference is that although the previously
823 mandatory warnings are still enabled by default, they can then be
824 subsequently enabled or disabled with the lexical warning pragma. For
825 example, in the code below, an C<"isn't numeric"> warning will only
826 be reported for the C<$a> variable.
832 Note that neither the B<-w> flag or the C<$^W> can be used to
833 disable/enable default warnings. They are still mandatory in this case.
835 =head2 What's wrong with B<-w> and C<$^W>
837 Although very useful, the big problem with using B<-w> on the command
838 line to enable warnings is that it is all or nothing. Take the typical
839 scenario when you are writing a Perl program. Parts of the code you
840 will write yourself, but it's very likely that you will make use of
841 pre-written Perl modules. If you use the B<-w> flag in this case, you
842 end up enabling warnings in pieces of code that you haven't written.
844 Similarly, using C<$^W> to either disable or enable blocks of code is
845 fundamentally flawed. For a start, say you want to disable warnings in
846 a block of code. You might expect this to be enough to do the trick:
854 When this code is run with the B<-w> flag, a warning will be produced
855 for the C<$a> line: C<"Reversed += operator">.
857 The problem is that Perl has both compile-time and run-time warnings. To
858 disable compile-time warnings you need to rewrite the code like this:
866 The other big problem with C<$^W> is the way you can inadvertently
867 change the warning setting in unexpected places in your code. For example,
868 when the code below is run (without the B<-w> flag), the second call
869 to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas
884 This is a side-effect of C<$^W> being dynamically scoped.
886 Lexical warnings get around these limitations by allowing finer control
887 over where warnings can or can't be tripped.
889 =head2 Controlling Warnings from the Command Line
891 There are three Command Line flags that can be used to control when
892 warnings are (or aren't) produced:
899 This is the existing flag. If the lexical warnings pragma is B<not>
900 used in any of you code, or any of the modules that you use, this flag
901 will enable warnings everywhere. See L<Backward Compatibility> for
902 details of how this flag interacts with lexical warnings.
907 If the B<-W> flag is used on the command line, it will enable all warnings
908 throughout the program regardless of whether warnings were disabled
909 locally using C<no warnings> or C<$^W =0>.
910 This includes all files that get
911 included via C<use>, C<require> or C<do>.
912 Think of it as the Perl equivalent of the "lint" command.
917 Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
921 =head2 Backward Compatibility
923 If you are used to working with a version of Perl prior to the
924 introduction of lexically scoped warnings, or have code that uses both
925 lexical warnings and C<$^W>, this section will describe how they interact.
927 How Lexical Warnings interact with B<-w>/C<$^W>:
933 If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
934 control warnings is used and neither C<$^W> nor the C<warnings> pragma
935 are used, then default warnings will be enabled and optional warnings
937 This means that legacy code that doesn't attempt to control the warnings
942 The B<-w> flag just sets the global C<$^W> variable as in 5.005. This
943 means that any legacy code that currently relies on manipulating C<$^W>
944 to control warning behavior will still work as is.
948 Apart from now being a boolean, the C<$^W> variable operates in exactly
949 the same horrible uncontrolled global way, except that it cannot
950 disable/enable default warnings.
954 If a piece of code is under the control of the C<warnings> pragma,
955 both the C<$^W> variable and the B<-w> flag will be ignored for the
956 scope of the lexical warning.
960 The only way to override a lexical warnings setting is with the B<-W>
961 or B<-X> command line flags.
965 The combined effect of 3 & 4 is that it will allow code which uses
966 the C<warnings> pragma to control the warning behavior of $^W-type
967 code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
969 =head2 Category Hierarchy
970 X<warning, categories>
972 A hierarchy of "categories" have been defined to allow groups of warnings
973 to be enabled/disabled in isolation.
975 The current hierarchy is:
977 =for warnings.pl tree-goes-here
979 Just like the "strict" pragma any of these categories can be combined
981 use warnings qw(void redefine);
982 no warnings qw(io syntax untie);
984 Also like the "strict" pragma, if there is more than one instance of the
985 C<warnings> pragma in a given scope the cumulative effect is additive.
987 use warnings qw(void); # only "void" warnings enabled
989 use warnings qw(io); # only "void" & "io" warnings enabled
991 no warnings qw(void); # only "io" warnings enabled
993 To determine which category a specific warning has been assigned to see
996 Note: Before Perl 5.8.0, the lexical warnings category "deprecated" was a
997 sub-category of the "syntax" category. It is now a top-level category
1000 Note: Before 5.21.0, the "missing" lexical warnings category was
1001 internally defined to be the same as the "uninitialized" category. It
1002 is now a top-level category in its own right.
1004 =head2 Fatal Warnings
1007 The presence of the word "FATAL" in the category list will escalate
1008 warnings in those categories into fatal errors in that lexical scope.
1010 B<NOTE:> FATAL warnings should be used with care, particularly
1011 C<< FATAL => 'all' >>.
1013 Libraries using L<warnings::warn|/FUNCTIONS> for custom warning categories
1014 generally don't expect L<warnings::warn|/FUNCTIONS> to be fatal and can wind up
1015 in an unexpected state as a result. For XS modules issuing categorized
1016 warnings, such unanticipated exceptions could also expose memory leak bugs.
1018 Moreover, the Perl interpreter itself has had serious bugs involving
1019 fatalized warnings. For a summary of resolved and unresolved problems as
1020 of January 2015, please see
1021 L<this perl5-porters post|http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225235.html>.
1023 While some developers find fatalizing some warnings to be a useful
1024 defensive programming technique, using C<< FATAL => 'all' >> to fatalize
1025 all possible warning categories -- including custom ones -- is particularly
1026 risky. Therefore, the use of C<< FATAL => 'all' >> is
1027 L<discouraged|perlpolicy/discouraged>.
1029 The L<strictures|strictures/VERSION-2> module on CPAN offers one example of
1030 a warnings subset that the module's authors believe is relatively safe to
1033 B<NOTE:> users of FATAL warnings, especially those using
1034 C<< FATAL => 'all' >>, should be fully aware that they are risking future
1035 portability of their programs by doing so. Perl makes absolutely no
1036 commitments to not introduce new warnings or warnings categories in the
1037 future; indeed, we explicitly reserve the right to do so. Code that may
1038 not warn now may warn in a future release of Perl if the Perl5 development
1039 team deems it in the best interests of the community to do so. Should code
1040 using FATAL warnings break due to the introduction of a new warning we will
1041 NOT consider it an incompatible change. Users of FATAL warnings should
1042 take special caution during upgrades to check to see if their code triggers
1043 any new warnings and should pay particular attention to the fine print of
1044 the documentation of the features they use to ensure they do not exploit
1045 features that are documented as risky, deprecated, or unspecified, or where
1046 the documentation says "so don't do that", or anything with the same sense
1047 and spirit. Use of such features in combination with FATAL warnings is
1048 ENTIRELY AT THE USER'S RISK.
1050 The following documentation describes how to use FATAL warnings but the
1051 perl5 porters strongly recommend that you understand the risks before doing
1052 so, especially for library code intended for use by others, as there is no
1053 way for downstream users to change the choice of fatal categories.
1055 In the code below, the use of C<time>, C<length>
1056 and C<join> can all produce a C<"Useless use of xxx in void context">
1064 use warnings FATAL => qw(void);
1072 When run it produces this output
1074 Useless use of time in void context at fatal line 3.
1075 Useless use of length in void context at fatal line 7.
1077 The scope where C<length> is used has escalated the C<void> warnings
1078 category into a fatal error, so the program terminates immediately when it
1079 encounters the warning.
1081 To explicitly turn off a "FATAL" warning you just disable the warning
1082 it is associated with. So, for example, to disable the "void" warning
1083 in the example above, either of these will do the trick:
1085 no warnings qw(void);
1086 no warnings FATAL => qw(void);
1088 If you want to downgrade a warning that has been escalated into a fatal
1089 error back to a normal warning, you can use the "NONFATAL" keyword. For
1090 example, the code below will promote all warnings into fatal errors,
1091 except for those in the "syntax" category.
1093 use warnings FATAL => 'all', NONFATAL => 'syntax';
1095 As of Perl 5.20, instead of C<< use warnings FATAL => 'all'; >> you can
1098 use v5.20; # Perl 5.20 or greater is required for the following
1099 use warnings 'FATAL'; # short form of "use warnings FATAL => 'all';"
1101 If you want your program to be compatible with versions of Perl before
1102 5.20, you must use C<< use warnings FATAL => 'all'; >> instead. (In
1103 previous versions of Perl, the behavior of the statements
1104 C<< use warnings 'FATAL'; >>, C<< use warnings 'NONFATAL'; >> and
1105 C<< no warnings 'FATAL'; >> was unspecified; they did not behave as if
1106 they included the C<< => 'all' >> portion. As of 5.20, they do.)
1108 =head2 Reporting Warnings from a Module
1109 X<warning, reporting> X<warning, registering>
1111 The C<warnings> pragma provides a number of functions that are useful for
1112 module authors. These are used when you want to report a module-specific
1113 warning to a calling module has enabled warnings via the C<warnings>
1116 Consider the module C<MyMod::Abc> below.
1120 use warnings::register;
1124 if ($path !~ m#^/#) {
1125 warnings::warn("changing relative path to /var/abc")
1126 if warnings::enabled();
1127 $path = "/var/abc/$path";
1133 The call to C<warnings::register> will create a new warnings category
1134 called "MyMod::Abc", i.e. the new category name matches the current
1135 package name. The C<open> function in the module will display a warning
1136 message if it gets given a relative path as a parameter. This warnings
1137 will only be displayed if the code that uses C<MyMod::Abc> has actually
1138 enabled them with the C<warnings> pragma like below.
1141 use warnings 'MyMod::Abc';
1143 abc::open("../fred.txt");
1145 It is also possible to test whether the pre-defined warnings categories are
1146 set in the calling module with the C<warnings::enabled> function. Consider
1147 this snippet of code:
1152 if (warnings::enabled("deprecated")) {
1153 warnings::warn("deprecated",
1154 "open is deprecated, use new instead");
1163 The function C<open> has been deprecated, so code has been included to
1164 display a warning message whenever the calling module has (at least) the
1165 "deprecated" warnings category enabled. Something like this, say.
1167 use warnings 'deprecated';
1170 MyMod::Abc::open($filename);
1172 Either the C<warnings::warn> or C<warnings::warnif> function should be
1173 used to actually display the warnings message. This is because they can
1174 make use of the feature that allows warnings to be escalated into fatal
1175 errors. So in this case
1178 use warnings FATAL => 'MyMod::Abc';
1180 MyMod::Abc::open('../fred.txt');
1182 the C<warnings::warnif> function will detect this and die after
1183 displaying the warning message.
1185 The three warnings functions, C<warnings::warn>, C<warnings::warnif>
1186 and C<warnings::enabled> can optionally take an object reference in place
1187 of a category name. In this case the functions will use the class name
1188 of the object as the warnings category.
1190 Consider this example:
1195 use warnings::register;
1208 if ($value % 2 && warnings::enabled($self))
1209 { warnings::warn($self, "Odd numbers are unsafe") }
1216 $self->check($value);
1224 use warnings::register;
1226 our @ISA = qw( Original );
1236 The code below makes use of both modules, but it only enables warnings from
1241 use warnings 'Derived';
1242 my $a = Original->new();
1244 my $b = Derived->new();
1247 When this code is run only the C<Derived> object, C<$b>, will generate
1250 Odd numbers are unsafe at main.pl line 7
1252 Notice also that the warning is reported at the line where the object is first
1255 When registering new categories of warning, you can supply more names to
1256 warnings::register like this:
1259 use warnings::register qw(format precision);
1263 warnings::warnif('MyModule::format', '...');
1269 =item use warnings::register
1271 Creates a new warnings category with the same name as the package where
1272 the call to the pragma is used.
1274 =item warnings::enabled()
1276 Use the warnings category with the same name as the current package.
1278 Return TRUE if that warnings category is enabled in the calling module.
1279 Otherwise returns FALSE.
1281 =item warnings::enabled($category)
1283 Return TRUE if the warnings category, C<$category>, is enabled in the
1285 Otherwise returns FALSE.
1287 =item warnings::enabled($object)
1289 Use the name of the class for the object reference, C<$object>, as the
1292 Return TRUE if that warnings category is enabled in the first scope
1293 where the object is used.
1294 Otherwise returns FALSE.
1296 =item warnings::fatal_enabled()
1298 Return TRUE if the warnings category with the same name as the current
1299 package has been set to FATAL in the calling module.
1300 Otherwise returns FALSE.
1302 =item warnings::fatal_enabled($category)
1304 Return TRUE if the warnings category C<$category> has been set to FATAL in
1306 Otherwise returns FALSE.
1308 =item warnings::fatal_enabled($object)
1310 Use the name of the class for the object reference, C<$object>, as the
1313 Return TRUE if that warnings category has been set to FATAL in the first
1314 scope where the object is used.
1315 Otherwise returns FALSE.
1317 =item warnings::warn($message)
1319 Print C<$message> to STDERR.
1321 Use the warnings category with the same name as the current package.
1323 If that warnings category has been set to "FATAL" in the calling module
1324 then die. Otherwise return.
1326 =item warnings::warn($category, $message)
1328 Print C<$message> to STDERR.
1330 If the warnings category, C<$category>, has been set to "FATAL" in the
1331 calling module then die. Otherwise return.
1333 =item warnings::warn($object, $message)
1335 Print C<$message> to STDERR.
1337 Use the name of the class for the object reference, C<$object>, as the
1340 If that warnings category has been set to "FATAL" in the scope where C<$object>
1341 is first used then die. Otherwise return.
1344 =item warnings::warnif($message)
1348 if (warnings::enabled())
1349 { warnings::warn($message) }
1351 =item warnings::warnif($category, $message)
1355 if (warnings::enabled($category))
1356 { warnings::warn($category, $message) }
1358 =item warnings::warnif($object, $message)
1362 if (warnings::enabled($object))
1363 { warnings::warn($object, $message) }
1365 =item warnings::register_categories(@names)
1367 This registers warning categories for the given names and is primarily for
1368 use by the warnings::register pragma.
1372 See also L<perlmodlib/Pragmatic Modules> and L<perldiag>.