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, \
378 =head1 Warning and Dieing
380 =for apidoc Am|bool|ckWARN|U32 w
382 Returns a boolean as to whether or not warnings are enabled for the warning
383 category C<w>. If the category is by default enabled even if not within the
384 scope of S<C<use warnings>>, instead use the L</ckWARN_d> macro.
386 =for apidoc Am|bool|ckWARN_d|U32 w
388 Like C<L</ckWARN>>, but for use if and only if the warning category is by
389 default enabled even if not within the scope of S<C<use warnings>>.
391 =for apidoc Am|bool|ckWARN2|U32 w1|U32 w2
393 Like C<L</ckWARN>>, but takes two warnings categories as input, and returns
394 TRUE if either is enabled. If either category is by default enabled even if
395 not within the scope of S<C<use warnings>>, instead use the L</ckWARN2_d>
396 macro. The categories must be completely independent, one may not be
397 subclassed from the other.
399 =for apidoc Am|bool|ckWARN2_d|U32 w1|U32 w2
401 Like C<L</ckWARN2>>, but for use if and only if either warning category is by
402 default enabled even if not within the scope of S<C<use warnings>>.
404 =for apidoc Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3
406 Like C<L</ckWARN2>>, but takes three warnings categories as input, and returns
407 TRUE if any is enabled. If any of the categories is by default enabled even
408 if not within the scope of S<C<use warnings>>, instead use the L</ckWARN3_d>
409 macro. The categories must be completely independent, one may not be
410 subclassed from any other.
412 =for apidoc Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
414 Like C<L</ckWARN3>>, but for use if and only if any of the warning categories
415 is by default enabled even if not within the scope of S<C<use warnings>>.
417 =for apidoc Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
419 Like C<L</ckWARN3>>, but takes four warnings categories as input, and returns
420 TRUE if any is enabled. If any of the categories is by default enabled even
421 if not within the scope of S<C<use warnings>>, instead use the L</ckWARN4_d>
422 macro. The categories must be completely independent, one may not be
423 subclassed from any other.
425 =for apidoc Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
427 Like C<L</ckWARN4>>, but for use if and only if any of the warning categories
428 is by default enabled even if not within the scope of S<C<use warnings>>.
434 #define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
436 /* The w1, w2 ... should be independent warnings categories; one shouldn't be
437 * a subcategory of any other */
439 #define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
440 #define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
441 #define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
443 #define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
444 #define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
445 #define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
446 #define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
450 #define packWARN(a) (a )
452 /* The a, b, ... should be independent warnings categories; one shouldn't be
453 * a subcategory of any other */
455 #define packWARN2(a,b) ((a) | ((b)<<8) )
456 #define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
457 #define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
459 #define unpackWARN1(x) ((x) & 0xFF)
460 #define unpackWARN2(x) (((x) >>8) & 0xFF)
461 #define unpackWARN3(x) (((x) >>16) & 0xFF)
462 #define unpackWARN4(x) (((x) >>24) & 0xFF)
466 !specialWARN(PL_curcop->cop_warnings) && \
467 ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) || \
468 isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \
469 isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \
470 isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \
471 isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))
473 /* end of file warnings.h */
476 read_only_bottom_close_and_rename($warn);
480 last if /^VERSION$/ ;
484 print $pm qq(our \$VERSION = "$::VERSION";\n);
487 last if /^KEYWORDS$/ ;
492 print $pm "our %Offsets = (" ;
493 foreach my $k (sort { $a <=> $b } keys %ValueToName) {
494 my ($name, $version) = @{ $ValueToName{$k} };
497 if ( $last_ver != $version ) {
499 print $pm tab(6, " # Warnings Categories added in Perl $version");
502 print $pm tab(6, " '$name'"), "=> $k,\n" ;
503 $last_ver = $version;
508 print $pm "our %Bits = (\n" ;
509 foreach my $k (sort keys %list) {
512 my @list = sort { $a <=> $b } @$v ;
514 print $pm tab(6, " '$k'"), '=> "',
515 mkHex($warn_size, map $_ * 2 , @list),
516 '", # [', mkRange(@list), "]\n" ;
521 print $pm "our %DeadBits = (\n" ;
522 foreach my $k (sort keys %list) {
525 my @list = sort { $a <=> $b } @$v ;
527 print $pm tab(6, " '$k'"), '=> "',
528 mkHex($warn_size, map $_ * 2 + 1 , @list),
529 '", # [', mkRange(@list), "]\n" ;
533 print $pm "# These are used by various things, including our own tests\n";
534 print $pm tab(6, 'our $NONE'), '= "', ('\0' x $warn_size) , "\";\n" ;
535 print $pm tab(6, 'our $DEFAULT'), '= "', mkHex($warn_size, map $_ * 2, @def),
536 '", # [', mkRange(sort { $a <=> $b } @def), "]\n" ;
537 print $pm tab(6, 'our $LAST_BIT'), '= ' . "$index ;\n" ;
538 print $pm tab(6, 'our $BYTES'), '= ' . "$warn_size ;\n" ;
540 if ($_ eq "=for warnings.pl tree-goes-here\n") {
541 print $pm warningsTree($tree, " ");
547 read_only_bottom_close_and_rename($pm);
554 # Verify that we're called correctly so that warnings will work.
555 # Can't use Carp, since Carp uses us!
556 # String regexps because constant folding = smaller optree = less memory vs regexp literal
557 # see also strict.pm.
558 die sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2]
559 if __FILE__ !~ ( '(?x) \b '.__PACKAGE__.' \.pmc? \z' )
560 && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' );
564 our $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
568 require Carp; # this initializes %CarpInternal
569 local $Carp::CarpInternal{'warnings'};
570 delete $Carp::CarpInternal{'warnings'};
580 foreach my $word ( @_ ) {
581 if ($word eq 'FATAL') {
585 elsif ($word eq 'NONFATAL') {
589 elsif ($catmask = $Bits{$word}) {
591 $mask |= $DeadBits{$word} if $fatal ;
592 $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
595 { Croaker("Unknown warnings category '$word'")}
603 # called from B::Deparse.pm
604 push @_, 'all' unless @_ ;
605 return _bits(undef, @_) ;
612 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
614 if (vec($mask, $Offsets{'all'}, 1)) {
615 $mask |= $Bits{'all'} ;
616 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
619 # append 'all' when implied (after a lone "FATAL" or "NONFATAL")
620 push @_, 'all' if @_==1 && ( $_[0] eq 'FATAL' || $_[0] eq 'NONFATAL' );
622 # Empty @_ is equivalent to @_ = 'all' ;
623 ${^WARNING_BITS} = @_ ? _bits($mask, @_) : $mask | $Bits{all} ;
631 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
633 if (vec($mask, $Offsets{'all'}, 1)) {
634 $mask |= $Bits{'all'} ;
635 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
638 # append 'all' when implied (empty import list or after a lone "FATAL")
639 push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
641 foreach my $word ( @_ ) {
642 if ($word eq 'FATAL') {
645 elsif ($catmask = $Bits{$word}) {
646 $mask &= ~($catmask | $DeadBits{$word} | $All);
649 { Croaker("Unknown warnings category '$word'")}
652 ${^WARNING_BITS} = $mask ;
655 my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
657 sub MESSAGE () { 4 };
667 my $has_message = $wanted & MESSAGE;
669 unless (@_ == 1 || @_ == ($has_message ? 2 : 0)) {
670 my $sub = (caller 1)[3];
671 my $syntax = $has_message ? "[category,] 'message'" : '[category]';
672 Croaker("Usage: $sub($syntax)");
675 my $message = pop if $has_message;
678 # check the category supplied.
680 if (my $type = ref $category) {
681 Croaker("not an object")
682 if exists $builtin_type{$type};
686 $offset = $Offsets{$category};
687 Croaker("Unknown warnings category '$category'")
688 unless defined $offset;
691 $category = (caller(1))[0] ;
692 $offset = $Offsets{$category};
693 Croaker("package '$category' not registered for warnings")
694 unless defined $offset ;
702 while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
703 last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
708 $i = _error_loc(); # see where Carp will allocate the error
711 # Default to 0 if caller returns nothing. Default to $DEFAULT if it
712 # explicitly returns undef.
713 my(@callers_bitmask) = (caller($i))[9] ;
714 my $callers_bitmask =
715 @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
718 foreach my $type (FATAL, NORMAL) {
719 next unless $wanted & $type;
721 push @results, (vec($callers_bitmask, $offset + $type - 1, 1) ||
722 vec($callers_bitmask, $Offsets{'all'} + $type - 1, 1));
725 # &enabled and &fatal_enabled
726 return $results[0] unless $has_message;
728 # &warnif, and the category is neither enabled as warning nor as fatal
729 return if $wanted == (NORMAL | FATAL | MESSAGE)
730 && !($results[0] || $results[1]);
733 Carp::croak($message) if $results[0];
734 # will always get here for &warn. will only get here for &warnif if the
735 # category is enabled
736 Carp::carp($message);
744 vec($mask, $bit, 1) = 1;
748 sub register_categories
752 for my $name (@names) {
753 if (! defined $Bits{$name}) {
754 $Bits{$name} = _mkMask($LAST_BIT);
755 vec($Bits{'all'}, $LAST_BIT, 1) = 1;
756 $Offsets{$name} = $LAST_BIT ++;
757 foreach my $k (keys %Bits) {
758 vec($Bits{$k}, $LAST_BIT, 1) = 0;
760 $DeadBits{$name} = _mkMask($LAST_BIT);
761 vec($DeadBits{'all'}, $LAST_BIT++, 1) = 1;
768 goto &Carp::short_error_loc; # don't introduce another stack frame
773 return __chk(NORMAL, @_);
778 return __chk(FATAL, @_);
783 return __chk(FATAL | MESSAGE, @_);
788 return __chk(NORMAL | FATAL | MESSAGE, @_);
791 # These are not part of any public interface, so we can delete them to save
793 delete @warnings::{qw(NORMAL FATAL MESSAGE)};
799 warnings - Perl pragma to control optional warnings
809 use warnings::register;
810 if (warnings::enabled()) {
811 warnings::warn("some warning");
814 if (warnings::enabled("void")) {
815 warnings::warn("void", "some warning");
818 if (warnings::enabled($object)) {
819 warnings::warn($object, "some warning");
822 warnings::warnif("some warning");
823 warnings::warnif("void", "some warning");
824 warnings::warnif($object, "some warning");
828 The C<warnings> pragma gives control over which warnings are enabled in
829 which parts of a Perl program. It's a more flexible alternative for
830 both the command line flag B<-w> and the equivalent Perl variable,
833 This pragma works just like the C<strict> pragma.
834 This means that the scope of the warning pragma is limited to the
835 enclosing block. It also means that the pragma setting will not
836 leak across files (via C<use>, C<require> or C<do>). This allows
837 authors to independently define the degree of warning checks that will
838 be applied to their module.
840 By default, optional warnings are disabled, so any legacy code that
841 doesn't attempt to control the warnings will work unchanged.
843 All warnings are enabled in a block by either of these:
848 Similarly all warnings are disabled in a block by either of these:
853 For example, consider the code below:
863 The code in the enclosing block has warnings enabled, but the inner
864 block has them disabled. In this case that means the assignment to the
865 scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
866 warning, but the assignment to the scalar C<$b> will not.
868 =head2 Default Warnings and Optional Warnings
870 Before the introduction of lexical warnings, Perl had two classes of
871 warnings: mandatory and optional.
873 As its name suggests, if your code tripped a mandatory warning, you
874 would get a warning whether you wanted it or not.
875 For example, the code below would always produce an C<"isn't numeric">
876 warning about the "2:".
880 With the introduction of lexical warnings, mandatory warnings now become
881 I<default> warnings. The difference is that although the previously
882 mandatory warnings are still enabled by default, they can then be
883 subsequently enabled or disabled with the lexical warning pragma. For
884 example, in the code below, an C<"isn't numeric"> warning will only
885 be reported for the C<$a> variable.
891 Note that neither the B<-w> flag or the C<$^W> can be used to
892 disable/enable default warnings. They are still mandatory in this case.
894 =head2 What's wrong with B<-w> and C<$^W>
896 Although very useful, the big problem with using B<-w> on the command
897 line to enable warnings is that it is all or nothing. Take the typical
898 scenario when you are writing a Perl program. Parts of the code you
899 will write yourself, but it's very likely that you will make use of
900 pre-written Perl modules. If you use the B<-w> flag in this case, you
901 end up enabling warnings in pieces of code that you haven't written.
903 Similarly, using C<$^W> to either disable or enable blocks of code is
904 fundamentally flawed. For a start, say you want to disable warnings in
905 a block of code. You might expect this to be enough to do the trick:
913 When this code is run with the B<-w> flag, a warning will be produced
914 for the C<$a> line: C<"Reversed += operator">.
916 The problem is that Perl has both compile-time and run-time warnings. To
917 disable compile-time warnings you need to rewrite the code like this:
925 The other big problem with C<$^W> is the way you can inadvertently
926 change the warning setting in unexpected places in your code. For example,
927 when the code below is run (without the B<-w> flag), the second call
928 to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas
943 This is a side-effect of C<$^W> being dynamically scoped.
945 Lexical warnings get around these limitations by allowing finer control
946 over where warnings can or can't be tripped.
948 =head2 Controlling Warnings from the Command Line
950 There are three Command Line flags that can be used to control when
951 warnings are (or aren't) produced:
958 This is the existing flag. If the lexical warnings pragma is B<not>
959 used in any of you code, or any of the modules that you use, this flag
960 will enable warnings everywhere. See L<Backward Compatibility> for
961 details of how this flag interacts with lexical warnings.
966 If the B<-W> flag is used on the command line, it will enable all warnings
967 throughout the program regardless of whether warnings were disabled
968 locally using C<no warnings> or C<$^W =0>.
969 This includes all files that get
970 included via C<use>, C<require> or C<do>.
971 Think of it as the Perl equivalent of the "lint" command.
976 Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
980 =head2 Backward Compatibility
982 If you are used to working with a version of Perl prior to the
983 introduction of lexically scoped warnings, or have code that uses both
984 lexical warnings and C<$^W>, this section will describe how they interact.
986 How Lexical Warnings interact with B<-w>/C<$^W>:
992 If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
993 control warnings is used and neither C<$^W> nor the C<warnings> pragma
994 are used, then default warnings will be enabled and optional warnings
996 This means that legacy code that doesn't attempt to control the warnings
1001 The B<-w> flag just sets the global C<$^W> variable as in 5.005. This
1002 means that any legacy code that currently relies on manipulating C<$^W>
1003 to control warning behavior will still work as is.
1007 Apart from now being a boolean, the C<$^W> variable operates in exactly
1008 the same horrible uncontrolled global way, except that it cannot
1009 disable/enable default warnings.
1013 If a piece of code is under the control of the C<warnings> pragma,
1014 both the C<$^W> variable and the B<-w> flag will be ignored for the
1015 scope of the lexical warning.
1019 The only way to override a lexical warnings setting is with the B<-W>
1020 or B<-X> command line flags.
1024 The combined effect of 3 & 4 is that it will allow code which uses
1025 the C<warnings> pragma to control the warning behavior of $^W-type
1026 code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
1028 =head2 Category Hierarchy
1029 X<warning, categories>
1031 A hierarchy of "categories" have been defined to allow groups of warnings
1032 to be enabled/disabled in isolation.
1034 The current hierarchy is:
1036 =for warnings.pl tree-goes-here
1038 Just like the "strict" pragma any of these categories can be combined
1040 use warnings qw(void redefine);
1041 no warnings qw(io syntax untie);
1043 Also like the "strict" pragma, if there is more than one instance of the
1044 C<warnings> pragma in a given scope the cumulative effect is additive.
1046 use warnings qw(void); # only "void" warnings enabled
1048 use warnings qw(io); # only "void" & "io" warnings enabled
1050 no warnings qw(void); # only "io" warnings enabled
1052 To determine which category a specific warning has been assigned to see
1055 Note: Before Perl 5.8.0, the lexical warnings category "deprecated" was a
1056 sub-category of the "syntax" category. It is now a top-level category
1059 Note: Before 5.21.0, the "missing" lexical warnings category was
1060 internally defined to be the same as the "uninitialized" category. It
1061 is now a top-level category in its own right.
1063 =head2 Fatal Warnings
1066 The presence of the word "FATAL" in the category list will escalate
1067 warnings in those categories into fatal errors in that lexical scope.
1069 B<NOTE:> FATAL warnings should be used with care, particularly
1070 C<< FATAL => 'all' >>.
1072 Libraries using L<warnings::warn|/FUNCTIONS> for custom warning categories
1073 generally don't expect L<warnings::warn|/FUNCTIONS> to be fatal and can wind up
1074 in an unexpected state as a result. For XS modules issuing categorized
1075 warnings, such unanticipated exceptions could also expose memory leak bugs.
1077 Moreover, the Perl interpreter itself has had serious bugs involving
1078 fatalized warnings. For a summary of resolved and unresolved problems as
1079 of January 2015, please see
1080 L<this perl5-porters post|http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225235.html>.
1082 While some developers find fatalizing some warnings to be a useful
1083 defensive programming technique, using C<< FATAL => 'all' >> to fatalize
1084 all possible warning categories -- including custom ones -- is particularly
1085 risky. Therefore, the use of C<< FATAL => 'all' >> is
1086 L<discouraged|perlpolicy/discouraged>.
1088 The L<strictures|strictures/VERSION-2> module on CPAN offers one example of
1089 a warnings subset that the module's authors believe is relatively safe to
1092 B<NOTE:> users of FATAL warnings, especially those using
1093 C<< FATAL => 'all' >>, should be fully aware that they are risking future
1094 portability of their programs by doing so. Perl makes absolutely no
1095 commitments to not introduce new warnings or warnings categories in the
1096 future; indeed, we explicitly reserve the right to do so. Code that may
1097 not warn now may warn in a future release of Perl if the Perl5 development
1098 team deems it in the best interests of the community to do so. Should code
1099 using FATAL warnings break due to the introduction of a new warning we will
1100 NOT consider it an incompatible change. Users of FATAL warnings should
1101 take special caution during upgrades to check to see if their code triggers
1102 any new warnings and should pay particular attention to the fine print of
1103 the documentation of the features they use to ensure they do not exploit
1104 features that are documented as risky, deprecated, or unspecified, or where
1105 the documentation says "so don't do that", or anything with the same sense
1106 and spirit. Use of such features in combination with FATAL warnings is
1107 ENTIRELY AT THE USER'S RISK.
1109 The following documentation describes how to use FATAL warnings but the
1110 perl5 porters strongly recommend that you understand the risks before doing
1111 so, especially for library code intended for use by others, as there is no
1112 way for downstream users to change the choice of fatal categories.
1114 In the code below, the use of C<time>, C<length>
1115 and C<join> can all produce a C<"Useless use of xxx in void context">
1123 use warnings FATAL => qw(void);
1131 When run it produces this output
1133 Useless use of time in void context at fatal line 3.
1134 Useless use of length in void context at fatal line 7.
1136 The scope where C<length> is used has escalated the C<void> warnings
1137 category into a fatal error, so the program terminates immediately when it
1138 encounters the warning.
1140 To explicitly turn off a "FATAL" warning you just disable the warning
1141 it is associated with. So, for example, to disable the "void" warning
1142 in the example above, either of these will do the trick:
1144 no warnings qw(void);
1145 no warnings FATAL => qw(void);
1147 If you want to downgrade a warning that has been escalated into a fatal
1148 error back to a normal warning, you can use the "NONFATAL" keyword. For
1149 example, the code below will promote all warnings into fatal errors,
1150 except for those in the "syntax" category.
1152 use warnings FATAL => 'all', NONFATAL => 'syntax';
1154 As of Perl 5.20, instead of C<< use warnings FATAL => 'all'; >> you can
1157 use v5.20; # Perl 5.20 or greater is required for the following
1158 use warnings 'FATAL'; # short form of "use warnings FATAL => 'all';"
1160 If you want your program to be compatible with versions of Perl before
1161 5.20, you must use C<< use warnings FATAL => 'all'; >> instead. (In
1162 previous versions of Perl, the behavior of the statements
1163 C<< use warnings 'FATAL'; >>, C<< use warnings 'NONFATAL'; >> and
1164 C<< no warnings 'FATAL'; >> was unspecified; they did not behave as if
1165 they included the C<< => 'all' >> portion. As of 5.20, they do.)
1167 =head2 Reporting Warnings from a Module
1168 X<warning, reporting> X<warning, registering>
1170 The C<warnings> pragma provides a number of functions that are useful for
1171 module authors. These are used when you want to report a module-specific
1172 warning to a calling module has enabled warnings via the C<warnings>
1175 Consider the module C<MyMod::Abc> below.
1179 use warnings::register;
1183 if ($path !~ m#^/#) {
1184 warnings::warn("changing relative path to /var/abc")
1185 if warnings::enabled();
1186 $path = "/var/abc/$path";
1192 The call to C<warnings::register> will create a new warnings category
1193 called "MyMod::Abc", i.e. the new category name matches the current
1194 package name. The C<open> function in the module will display a warning
1195 message if it gets given a relative path as a parameter. This warnings
1196 will only be displayed if the code that uses C<MyMod::Abc> has actually
1197 enabled them with the C<warnings> pragma like below.
1200 use warnings 'MyMod::Abc';
1202 abc::open("../fred.txt");
1204 It is also possible to test whether the pre-defined warnings categories are
1205 set in the calling module with the C<warnings::enabled> function. Consider
1206 this snippet of code:
1211 if (warnings::enabled("deprecated")) {
1212 warnings::warn("deprecated",
1213 "open is deprecated, use new instead");
1222 The function C<open> has been deprecated, so code has been included to
1223 display a warning message whenever the calling module has (at least) the
1224 "deprecated" warnings category enabled. Something like this, say.
1226 use warnings 'deprecated';
1229 MyMod::Abc::open($filename);
1231 Either the C<warnings::warn> or C<warnings::warnif> function should be
1232 used to actually display the warnings message. This is because they can
1233 make use of the feature that allows warnings to be escalated into fatal
1234 errors. So in this case
1237 use warnings FATAL => 'MyMod::Abc';
1239 MyMod::Abc::open('../fred.txt');
1241 the C<warnings::warnif> function will detect this and die after
1242 displaying the warning message.
1244 The three warnings functions, C<warnings::warn>, C<warnings::warnif>
1245 and C<warnings::enabled> can optionally take an object reference in place
1246 of a category name. In this case the functions will use the class name
1247 of the object as the warnings category.
1249 Consider this example:
1254 use warnings::register;
1267 if ($value % 2 && warnings::enabled($self))
1268 { warnings::warn($self, "Odd numbers are unsafe") }
1275 $self->check($value);
1283 use warnings::register;
1285 our @ISA = qw( Original );
1295 The code below makes use of both modules, but it only enables warnings from
1300 use warnings 'Derived';
1301 my $a = Original->new();
1303 my $b = Derived->new();
1306 When this code is run only the C<Derived> object, C<$b>, will generate
1309 Odd numbers are unsafe at main.pl line 7
1311 Notice also that the warning is reported at the line where the object is first
1314 When registering new categories of warning, you can supply more names to
1315 warnings::register like this:
1318 use warnings::register qw(format precision);
1322 warnings::warnif('MyModule::format', '...');
1328 =item use warnings::register
1330 Creates a new warnings category with the same name as the package where
1331 the call to the pragma is used.
1333 =item warnings::enabled()
1335 Use the warnings category with the same name as the current package.
1337 Return TRUE if that warnings category is enabled in the calling module.
1338 Otherwise returns FALSE.
1340 =item warnings::enabled($category)
1342 Return TRUE if the warnings category, C<$category>, is enabled in the
1344 Otherwise returns FALSE.
1346 =item warnings::enabled($object)
1348 Use the name of the class for the object reference, C<$object>, as the
1351 Return TRUE if that warnings category is enabled in the first scope
1352 where the object is used.
1353 Otherwise returns FALSE.
1355 =item warnings::fatal_enabled()
1357 Return TRUE if the warnings category with the same name as the current
1358 package has been set to FATAL in the calling module.
1359 Otherwise returns FALSE.
1361 =item warnings::fatal_enabled($category)
1363 Return TRUE if the warnings category C<$category> has been set to FATAL in
1365 Otherwise returns FALSE.
1367 =item warnings::fatal_enabled($object)
1369 Use the name of the class for the object reference, C<$object>, as the
1372 Return TRUE if that warnings category has been set to FATAL in the first
1373 scope where the object is used.
1374 Otherwise returns FALSE.
1376 =item warnings::warn($message)
1378 Print C<$message> to STDERR.
1380 Use the warnings category with the same name as the current package.
1382 If that warnings category has been set to "FATAL" in the calling module
1383 then die. Otherwise return.
1385 =item warnings::warn($category, $message)
1387 Print C<$message> to STDERR.
1389 If the warnings category, C<$category>, has been set to "FATAL" in the
1390 calling module then die. Otherwise return.
1392 =item warnings::warn($object, $message)
1394 Print C<$message> to STDERR.
1396 Use the name of the class for the object reference, C<$object>, as the
1399 If that warnings category has been set to "FATAL" in the scope where C<$object>
1400 is first used then die. Otherwise return.
1403 =item warnings::warnif($message)
1407 if (warnings::enabled())
1408 { warnings::warn($message) }
1410 =item warnings::warnif($category, $message)
1414 if (warnings::enabled($category))
1415 { warnings::warn($category, $message) }
1417 =item warnings::warnif($object, $message)
1421 if (warnings::enabled($object))
1422 { warnings::warn($object, $message) }
1424 =item warnings::register_categories(@names)
1426 This registers warning categories for the given names and is primarily for
1427 use by the warnings::register pragma.
1431 See also L<perlmodlib/Pragmatic Modules> and L<perldiag>.