This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regen/warnings.pl: Collapse closely related pod
[perl5.git] / regen / warnings.pl
1 #!/usr/bin/perl
2 #
3 # Regenerate (overwriting only if changed):
4 #
5 #    lib/warnings.pm
6 #    warnings.h
7 #
8 # from information hardcoded into this script (the $tree hash), plus the
9 # template for warnings.pm in the DATA section.
10 #
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
13 #
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.
16 #
17 # This script is normally invoked from regen.pl.
18
19 $VERSION = '1.48';
20
21 BEGIN {
22     require './regen/regen_lib.pl';
23     push @INC, './lib';
24 }
25 use strict ;
26
27 sub DEFAULT_ON  () { 1 }
28 sub DEFAULT_OFF () { 2 }
29
30 my $tree = {
31 'all' => [ 5.008, {
32         'io'            => [ 5.008, {
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],
40                            }],
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],
53                            }],
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],
59                            }],
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],
77         'utf8'          => [ 5.008, {
78                                 'surrogate' => [ 5.013, DEFAULT_OFF],
79                                 'nonchar' => [ 5.013, DEFAULT_OFF],
80                                 'non_unicode' => [ 5.013, DEFAULT_OFF],
81                         }],
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 ],
110                                 'experimental::script_run' =>
111                                     [ 5.027, DEFAULT_ON ],
112                                 'experimental::alpha_assertions' =>
113                                     [ 5.027, DEFAULT_ON ],
114                                 'experimental::private_use' =>
115                                     [ 5.029, DEFAULT_ON ],
116                                 'experimental::uniprop_wildcards' =>
117                                     [ 5.029, DEFAULT_ON ],
118                                 'experimental::vlb' =>
119                                     [ 5.029, DEFAULT_ON ],
120                                 'experimental::isa' =>
121                                     [ 5.031, DEFAULT_ON ],
122                         }],
123
124         'missing'       => [ 5.021, DEFAULT_OFF],
125         'redundant'     => [ 5.021, DEFAULT_OFF],
126         'locale'        => [ 5.021, DEFAULT_ON],
127         'shadow'        => [ 5.027, DEFAULT_OFF],
128
129          #'default'     => [ 5.008, DEFAULT_ON ],
130 }]};
131
132 my @def ;
133 my %list ;
134 my %Value ;
135 my %ValueToName ;
136 my %NameToValue ;
137
138 my %v_list = () ;
139
140 sub valueWalk
141 {
142     my $tre = shift ;
143     my @list = () ;
144     my ($k, $v) ;
145
146     foreach $k (sort keys %$tre) {
147         $v = $tre->{$k};
148         die "duplicate key $k\n" if defined $list{$k} ;
149         die "Value associated with key '$k' is not an ARRAY reference"
150             if !ref $v || ref $v ne 'ARRAY' ;
151
152         my ($ver, $rest) = @{ $v } ;
153         push @{ $v_list{$ver} }, $k;
154
155         if (ref $rest)
156           { valueWalk ($rest) }
157
158     }
159
160 }
161
162 sub orderValues
163 {
164     my $index = 0;
165     foreach my $ver ( sort { $a <=> $b } keys %v_list ) {
166         foreach my $name (@{ $v_list{$ver} } ) {
167             $ValueToName{ $index } = [ uc $name, $ver ] ;
168             $NameToValue{ uc $name } = $index ++ ;
169         }
170     }
171
172     return $index ;
173 }
174
175 ###########################################################################
176
177 sub walk
178 {
179     my $tre = shift ;
180     my @list = () ;
181     my ($k, $v) ;
182
183     foreach $k (sort keys %$tre) {
184         $v = $tre->{$k};
185         die "duplicate key $k\n" if defined $list{$k} ;
186         die "Can't find key '$k'"
187             if ! defined $NameToValue{uc $k} ;
188         push @{ $list{$k} }, $NameToValue{uc $k} ;
189         die "Value associated with key '$k' is not an ARRAY reference"
190             if !ref $v || ref $v ne 'ARRAY' ;
191
192         my ($ver, $rest) = @{ $v } ;
193         if (ref $rest)
194           { push (@{ $list{$k} }, walk ($rest)) }
195         elsif ($rest == DEFAULT_ON)
196           { push @def, $NameToValue{uc $k} }
197
198         push @list, @{ $list{$k} } ;
199     }
200
201    return @list ;
202 }
203
204 ###########################################################################
205
206 sub mkRange
207 {
208     my @in = @_ ;
209     my @out = @in ;
210
211     for my $i (1 .. @in - 1) {
212         $out[$i] = ".."
213           if $in[$i] == $in[$i - 1] + 1
214              && ($i >= @in  - 1 || $in[$i] + 1 == $in[$i + 1] );
215     }
216     $out[-1] = $in[-1] if $out[-1] eq "..";
217
218     my $out = join(",",@out);
219
220     $out =~ s/,(\.\.,)+/../g ;
221     return $out;
222 }
223
224 ###########################################################################
225 sub warningsTree
226 {
227     my $tre = shift ;
228     my $prefix = shift ;
229     my ($k, $v) ;
230
231     my $max = (sort {$a <=> $b} map { length $_ } keys %$tre)[-1] ;
232     my @keys = sort keys %$tre ;
233
234     my $rv = '';
235
236     while ($k = shift @keys) {
237         $v = $tre->{$k};
238         die "Value associated with key '$k' is not an ARRAY reference"
239             if !ref $v || ref $v ne 'ARRAY' ;
240
241         my $offset ;
242         if ($tre ne $tree) {
243             $rv .= $prefix . "|\n" ;
244             $rv .= $prefix . "+- $k" ;
245             $offset = ' ' x ($max + 4) ;
246         }
247         else {
248             $rv .= $prefix . "$k" ;
249             $offset = ' ' x ($max + 1) ;
250         }
251
252         my ($ver, $rest) = @{ $v } ;
253         if (ref $rest)
254         {
255             my $bar = @keys ? "|" : " ";
256             $rv .= " -" . "-" x ($max - length $k ) . "+\n" ;
257             $rv .= warningsTree ($rest, $prefix . $bar . $offset )
258         }
259         else
260           { $rv .= "\n" }
261     }
262
263     return $rv;
264 }
265
266 ###########################################################################
267
268 sub mkHexOct
269 {
270     my ($f, $max, @bits) = @_ ;
271     my $mask = "\x00" x $max ;
272     my $string = "" ;
273
274     foreach (@bits) {
275         vec($mask, $_, 1) = 1 ;
276     }
277
278     foreach (unpack("C*", $mask)) {
279         if ($f eq 'x') {
280             $string .= '\x' . sprintf("%2.2x", $_)
281         }
282         else {
283             $string .= '\\' . sprintf("%o", $_)
284         }
285     }
286     return $string ;
287 }
288
289 sub mkHex
290 {
291     my($max, @bits) = @_;
292     return mkHexOct("x", $max, @bits);
293 }
294
295 sub mkOct
296 {
297     my($max, @bits) = @_;
298     return mkHexOct("o", $max, @bits);
299 }
300
301 ###########################################################################
302
303 if (@ARGV && $ARGV[0] eq "tree")
304 {
305     print warningsTree($tree, "    ") ;
306     exit ;
307 }
308
309 my ($warn, $pm) = map {
310     open_new($_, '>', { by => 'regen/warnings.pl' });
311 } 'warnings.h', 'lib/warnings.pm';
312
313 my ($index, $warn_size);
314
315 {
316   # generate warnings.h
317
318   print $warn <<'EOM';
319
320 #define Off(x)                  ((x) / 8)
321 #define Bit(x)                  (1 << ((x) % 8))
322 #define IsSet(a, x)             ((a)[Off(x)] & Bit(x))
323
324
325 #define G_WARN_OFF              0       /* $^W == 0 */
326 #define G_WARN_ON               1       /* -w flag and $^W != 0 */
327 #define G_WARN_ALL_ON           2       /* -W flag */
328 #define G_WARN_ALL_OFF          4       /* -X flag */
329 #define G_WARN_ONCE             8       /* set if 'once' ever enabled */
330 #define G_WARN_ALL_MASK         (G_WARN_ALL_ON|G_WARN_ALL_OFF)
331
332 #define pWARN_STD               NULL
333 #define pWARN_ALL               (STRLEN *) &PL_WARN_ALL    /* use warnings 'all' */
334 #define pWARN_NONE              (STRLEN *) &PL_WARN_NONE   /* no  warnings 'all' */
335
336 #define specialWARN(x)          ((x) == pWARN_STD || (x) == pWARN_ALL ||        \
337                                  (x) == pWARN_NONE)
338
339 /* if PL_warnhook is set to this value, then warnings die */
340 #define PERL_WARNHOOK_FATAL     (&PL_sv_placeholder)
341 EOM
342
343   my $offset = 0 ;
344
345   valueWalk ($tree) ;
346   $index = orderValues();
347
348   die <<EOM if $index > 255 ;
349 Too many warnings categories -- max is 255
350     rewrite packWARN* & unpackWARN* macros
351 EOM
352
353   walk ($tree) ;
354   for (my $i = $index; $i & 3; $i++) {
355       push @{$list{all}}, $i;
356   }
357
358   $index *= 2 ;
359   $warn_size = int($index / 8) + ($index % 8 != 0) ;
360
361   my $k ;
362   my $last_ver = 0;
363   my @names;
364   foreach $k (sort { $a <=> $b } keys %ValueToName) {
365       my ($name, $version) = @{ $ValueToName{$k} };
366       print $warn "\n/* Warnings Categories added in Perl $version */\n\n"
367           if $last_ver != $version ;
368       $name =~ y/:/_/;
369       $name = "WARN_$name";
370       print $warn tab(6, "#define $name"), " $k\n" ;
371       push @names, $name;
372       $last_ver = $version ;
373   }
374   print $warn "\n\n/*\n" ;
375
376   print $warn map { "=for apidoc Amnh||$_\n" } @names;
377   print $warn "\n=cut\n*/\n\n" ;
378
379   print $warn tab(6, '#define WARNsize'),       " $warn_size\n" ;
380   print $warn tab(6, '#define WARN_ALLstring'), ' "', ('\125' x $warn_size) , "\"\n" ;
381   print $warn tab(6, '#define WARN_NONEstring'), ' "', ('\0' x $warn_size) , "\"\n" ;
382
383   print $warn <<'EOM';
384
385 #define isLEXWARN_on \
386         cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD)
387 #define isLEXWARN_off \
388         cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD)
389 #define isWARN_ONCE     (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
390 #define isWARN_on(c,x)  (IsSet((U8 *)(c + 1), 2*(x)))
391 #define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
392
393 #define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
394
395 #define free_and_set_cop_warnings(cmp,w) STMT_START { \
396   if (!specialWARN((cmp)->cop_warnings)) PerlMemShared_free((cmp)->cop_warnings); \
397   (cmp)->cop_warnings = w; \
398 } STMT_END
399
400 /*
401
402 =head1 Warning and Dieing
403
404 In all these calls, the C<U32 wI<n>> parameters are warning category
405 constants.  You can see the ones currently available in
406 L<warnings/Category Hierarchy>, just capitalize all letters in the names
407 and prefix them by C<WARN_>.  So, for example, the category C<void> used in a
408 perl program becomes C<WARN_VOID> when used in XS code and passed to one of
409 the calls below.
410
411 =for apidoc Am|bool|ckWARN|U32 w
412 =for apidoc_item ||ckWARN2|U32 w1|U32 w2
413 =for apidoc_item ||ckWARN3|U32 w1|U32 w2|U32 w3
414 =for apidoc_item ||ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
415 These return a boolean as to whether or not warnings are enabled for any of
416 the warning category(ies) parameters:  C<w>, C<w1>, ....
417
418 Should any of the categories by default be enabled even if not within the
419 scope of S<C<use warnings>>, instead use the C<L</ckWARN_d>> macros.
420
421 The categories must be completely independent, one may not be subclassed from
422 the other.
423
424 =for apidoc Am|bool|ckWARN_d|U32 w
425 =for apidoc_item ckWARN2_d|U32 w1|U32 w2
426 =for apidoc_item ckWARN3_d|U32 w1|U32 w2|U32 w3
427 =for apidoc_item ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
428
429 Like C<L</ckWARN>>, but for use if and only if the warning category(ies) is by
430 default enabled even if not within the scope of S<C<use warnings>>.
431
432
433 =cut
434
435 */
436
437 #define ckWARN(w)               Perl_ckwarn(aTHX_ packWARN(w))
438
439 /* The w1, w2 ... should be independent warnings categories; one shouldn't be
440  * a subcategory of any other */
441
442 #define ckWARN2(w1,w2)          Perl_ckwarn(aTHX_ packWARN2(w1,w2))
443 #define ckWARN3(w1,w2,w3)       Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
444 #define ckWARN4(w1,w2,w3,w4)    Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
445
446 #define ckWARN_d(w)             Perl_ckwarn_d(aTHX_ packWARN(w))
447 #define ckWARN2_d(w1,w2)        Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
448 #define ckWARN3_d(w1,w2,w3)     Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
449 #define ckWARN4_d(w1,w2,w3,w4)  Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
450
451 #define WARNshift               8
452
453 #define packWARN(a)             (a                                      )
454
455 /* The a, b, ... should be independent warnings categories; one shouldn't be
456  * a subcategory of any other */
457
458 #define packWARN2(a,b)          ((a) | ((b)<<8)                         )
459 #define packWARN3(a,b,c)        ((a) | ((b)<<8) | ((c)<<16)             )
460 #define packWARN4(a,b,c,d)      ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
461
462 #define unpackWARN1(x)          ((x)        & 0xFF)
463 #define unpackWARN2(x)          (((x) >>8)  & 0xFF)
464 #define unpackWARN3(x)          (((x) >>16) & 0xFF)
465 #define unpackWARN4(x)          (((x) >>24) & 0xFF)
466
467 #define ckDEAD(x)                                                       \
468    (PL_curcop &&                                                        \
469     !specialWARN(PL_curcop->cop_warnings) &&                            \
470     (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) ||             \
471       (unpackWARN2(x) &&                                                \
472         (isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) ||         \
473           (unpackWARN3(x) &&                                            \
474             (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) ||     \
475               (unpackWARN4(x) &&                                        \
476                 isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x)))))))))
477
478 /* end of file warnings.h */
479 EOM
480
481   read_only_bottom_close_and_rename($warn);
482 }
483
484 while (<DATA>) {
485     last if /^VERSION$/ ;
486     print $pm $_ ;
487 }
488
489 print $pm qq(our \$VERSION = "$::VERSION";\n);
490
491 while (<DATA>) {
492     last if /^KEYWORDS$/ ;
493     print $pm $_ ;
494 }
495
496 my $last_ver = 0;
497 print $pm "our %Offsets = (" ;
498 foreach my $k (sort { $a <=> $b } keys %ValueToName) {
499     my ($name, $version) = @{ $ValueToName{$k} };
500     $name = lc $name;
501     $k *= 2 ;
502     if ( $last_ver != $version ) {
503         print $pm "\n";
504         print $pm tab(6, "    # Warnings Categories added in Perl $version");
505         print $pm "\n";
506     }
507     print $pm tab(6, "    '$name'"), "=> $k,\n" ;
508     $last_ver = $version;
509 }
510
511 print $pm ");\n\n" ;
512
513 print $pm "our %Bits = (\n" ;
514 foreach my $k (sort keys  %list) {
515
516     my $v = $list{$k} ;
517     my @list = sort { $a <=> $b } @$v ;
518
519     print $pm tab(6, "    '$k'"), '=> "',
520                 mkHex($warn_size, map $_ * 2 , @list),
521                 '", # [', mkRange(@list), "]\n" ;
522 }
523
524 print $pm ");\n\n" ;
525
526 print $pm "our %DeadBits = (\n" ;
527 foreach my $k (sort keys  %list) {
528
529     my $v = $list{$k} ;
530     my @list = sort { $a <=> $b } @$v ;
531
532     print $pm tab(6, "    '$k'"), '=> "',
533                 mkHex($warn_size, map $_ * 2 + 1 , @list),
534                 '", # [', mkRange(@list), "]\n" ;
535 }
536
537 print $pm ");\n\n" ;
538 print $pm "# These are used by various things, including our own tests\n";
539 print $pm tab(6, 'our $NONE'), '=  "', ('\0' x $warn_size) , "\";\n" ;
540 print $pm tab(6, 'our $DEFAULT'), '=  "', mkHex($warn_size, map $_ * 2, @def),
541                            '"; # [', mkRange(sort { $a <=> $b } @def), "]\n" ;
542 print $pm tab(6, 'our $LAST_BIT'), '=  ' . "$index ;\n" ;
543 print $pm tab(6, 'our $BYTES'),    '=  ' . "$warn_size ;\n" ;
544 while (<DATA>) {
545     if ($_ eq "=for warnings.pl tree-goes-here\n") {
546       print $pm warningsTree($tree, "    ");
547       next;
548     }
549     print $pm $_ ;
550 }
551
552 read_only_bottom_close_and_rename($pm);
553
554 __END__
555 package warnings;
556
557 VERSION
558
559 # Verify that we're called correctly so that warnings will work.
560 # Can't use Carp, since Carp uses us!
561 # String regexps because constant folding = smaller optree = less memory vs regexp literal
562 # see also strict.pm.
563 die sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2]
564     if __FILE__ !~ ( '(?x) \b     '.__PACKAGE__.'  \.pmc? \z' )
565     && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' );
566
567 KEYWORDS
568
569 sub Croaker
570 {
571     require Carp; # this initializes %CarpInternal
572     local $Carp::CarpInternal{'warnings'};
573     delete $Carp::CarpInternal{'warnings'};
574     Carp::croak(@_);
575 }
576
577 sub _expand_bits {
578     my $bits = shift;
579     my $want_len = ($LAST_BIT + 7) >> 3;
580     my $len = length($bits);
581     if ($len != $want_len) {
582         if ($bits eq "") {
583             $bits = "\x00" x $want_len;
584         } elsif ($len > $want_len) {
585             substr $bits, $want_len, $len-$want_len, "";
586         } else {
587             my $x = vec($bits, $Offsets{all} >> 1, 2);
588             $x |= $x << 2;
589             $x |= $x << 4;
590             $bits .= chr($x) x ($want_len - $len);
591         }
592     }
593     return $bits;
594 }
595
596 sub _bits {
597     my $mask = shift ;
598     my $catmask ;
599     my $fatal = 0 ;
600     my $no_fatal = 0 ;
601
602     $mask = _expand_bits($mask);
603     foreach my $word ( @_ ) {
604         if ($word eq 'FATAL') {
605             $fatal = 1;
606             $no_fatal = 0;
607         }
608         elsif ($word eq 'NONFATAL') {
609             $fatal = 0;
610             $no_fatal = 1;
611         }
612         elsif ($catmask = $Bits{$word}) {
613             $mask |= $catmask ;
614             $mask |= $DeadBits{$word} if $fatal ;
615             $mask = ~(~$mask | $DeadBits{$word}) if $no_fatal ;
616         }
617         else
618           { Croaker("Unknown warnings category '$word'")}
619     }
620
621     return $mask ;
622 }
623
624 sub bits
625 {
626     # called from B::Deparse.pm
627     push @_, 'all' unless @_ ;
628     return _bits("", @_) ;
629 }
630
631 sub import
632 {
633     shift;
634
635     my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
636
637     # append 'all' when implied (empty import list or after a lone
638     # "FATAL" or "NONFATAL")
639     push @_, 'all'
640         if !@_ || (@_==1 && ($_[0] eq 'FATAL' || $_[0] eq 'NONFATAL'));
641
642     ${^WARNING_BITS} = _bits($mask, @_);
643 }
644
645 sub unimport
646 {
647     shift;
648
649     my $catmask ;
650     my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
651
652     # append 'all' when implied (empty import list or after a lone "FATAL")
653     push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
654
655     $mask = _expand_bits($mask);
656     foreach my $word ( @_ ) {
657         if ($word eq 'FATAL') {
658             next;
659         }
660         elsif ($catmask = $Bits{$word}) {
661             $mask = ~(~$mask | $catmask | $DeadBits{$word});
662         }
663         else
664           { Croaker("Unknown warnings category '$word'")}
665     }
666
667     ${^WARNING_BITS} = $mask ;
668 }
669
670 my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
671
672 sub LEVEL () { 8 };
673 sub MESSAGE () { 4 };
674 sub FATAL () { 2 };
675 sub NORMAL () { 1 };
676
677 sub __chk
678 {
679     my $category ;
680     my $offset ;
681     my $isobj = 0 ;
682     my $wanted = shift;
683     my $has_message = $wanted & MESSAGE;
684     my $has_level   = $wanted & LEVEL  ;
685
686     if ($has_level) {
687         if (@_ != ($has_message ? 3 : 2)) {
688             my $sub = (caller 1)[3];
689             my $syntax = $has_message
690                 ? "category, level, 'message'"
691                 : 'category, level';
692             Croaker("Usage: $sub($syntax)");
693         }
694     }
695     elsif (not @_ == 1 || @_ == ($has_message ? 2 : 0)) {
696         my $sub = (caller 1)[3];
697         my $syntax = $has_message ? "[category,] 'message'" : '[category]';
698         Croaker("Usage: $sub($syntax)");
699     }
700
701     my $message = pop if $has_message;
702
703     if (@_) {
704         # check the category supplied.
705         $category = shift ;
706         if (my $type = ref $category) {
707             Croaker("not an object")
708                 if exists $builtin_type{$type};
709             $category = $type;
710             $isobj = 1 ;
711         }
712         $offset = $Offsets{$category};
713         Croaker("Unknown warnings category '$category'")
714             unless defined $offset;
715     }
716     else {
717         $category = (caller(1))[0] ;
718         $offset = $Offsets{$category};
719         Croaker("package '$category' not registered for warnings")
720             unless defined $offset ;
721     }
722
723     my $i;
724
725     if ($isobj) {
726         my $pkg;
727         $i = 2;
728         while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
729             last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
730         }
731         $i -= 2 ;
732     }
733     elsif ($has_level) {
734         $i = 2 + shift;
735     }
736     else {
737         $i = _error_loc(); # see where Carp will allocate the error
738     }
739
740     # Default to 0 if caller returns nothing.  Default to $DEFAULT if it
741     # explicitly returns undef.
742     my(@callers_bitmask) = (caller($i))[9] ;
743     my $callers_bitmask =
744          @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
745     length($callers_bitmask) > ($offset >> 3) or $offset = $Offsets{all};
746
747     my @results;
748     foreach my $type (FATAL, NORMAL) {
749         next unless $wanted & $type;
750
751         push @results, vec($callers_bitmask, $offset + $type - 1, 1);
752     }
753
754     # &enabled and &fatal_enabled
755     return $results[0] unless $has_message;
756
757     # &warnif, and the category is neither enabled as warning nor as fatal
758     return if ($wanted & (NORMAL | FATAL | MESSAGE))
759                       == (NORMAL | FATAL | MESSAGE)
760         && !($results[0] || $results[1]);
761
762     # If we have an explicit level, bypass Carp.
763     if ($has_level and @callers_bitmask) {
764         # logic copied from util.c:mess_sv
765         my $stuff = " at " . join " line ", (caller $i)[1,2];
766         $stuff .= sprintf ", <%s> %s %d",
767                            *${^LAST_FH}{NAME},
768                            ($/ eq "\n" ? "line" : "chunk"), $.
769             if $. && ${^LAST_FH};
770         die "$message$stuff.\n" if $results[0];
771         return warn "$message$stuff.\n";
772     }
773
774     require Carp;
775     Carp::croak($message) if $results[0];
776     # will always get here for &warn. will only get here for &warnif if the
777     # category is enabled
778     Carp::carp($message);
779 }
780
781 sub _mkMask
782 {
783     my ($bit) = @_;
784     my $mask = "";
785
786     vec($mask, $bit, 1) = 1;
787     return $mask;
788 }
789
790 sub register_categories
791 {
792     my @names = @_;
793
794     for my $name (@names) {
795         if (! defined $Bits{$name}) {
796             $Offsets{$name}  = $LAST_BIT;
797             $Bits{$name}     = _mkMask($LAST_BIT++);
798             $DeadBits{$name} = _mkMask($LAST_BIT++);
799             if (length($Bits{$name}) > length($Bits{all})) {
800                 $Bits{all} .= "\x55";
801                 $DeadBits{all} .= "\xaa";
802             }
803         }
804     }
805 }
806
807 sub _error_loc {
808     require Carp;
809     goto &Carp::short_error_loc; # don't introduce another stack frame
810 }
811
812 sub enabled
813 {
814     return __chk(NORMAL, @_);
815 }
816
817 sub fatal_enabled
818 {
819     return __chk(FATAL, @_);
820 }
821
822 sub warn
823 {
824     return __chk(FATAL | MESSAGE, @_);
825 }
826
827 sub warnif
828 {
829     return __chk(NORMAL | FATAL | MESSAGE, @_);
830 }
831
832 sub enabled_at_level
833 {
834     return __chk(NORMAL | LEVEL, @_);
835 }
836
837 sub fatal_enabled_at_level
838 {
839     return __chk(FATAL | LEVEL, @_);
840 }
841
842 sub warn_at_level
843 {
844     return __chk(FATAL | MESSAGE | LEVEL, @_);
845 }
846
847 sub warnif_at_level
848 {
849     return __chk(NORMAL | FATAL | MESSAGE | LEVEL, @_);
850 }
851
852 # These are not part of any public interface, so we can delete them to save
853 # space.
854 delete @warnings::{qw(NORMAL FATAL MESSAGE LEVEL)};
855
856 1;
857 __END__
858
859 =head1 NAME
860
861 warnings - Perl pragma to control optional warnings
862
863 =head1 SYNOPSIS
864
865     use warnings;
866     no warnings;
867
868     use warnings "all";
869     no warnings "all";
870
871     use warnings::register;
872     if (warnings::enabled()) {
873         warnings::warn("some warning");
874     }
875
876     if (warnings::enabled("void")) {
877         warnings::warn("void", "some warning");
878     }
879
880     if (warnings::enabled($object)) {
881         warnings::warn($object, "some warning");
882     }
883
884     warnings::warnif("some warning");
885     warnings::warnif("void", "some warning");
886     warnings::warnif($object, "some warning");
887
888 =head1 DESCRIPTION
889
890 The C<warnings> pragma gives control over which warnings are enabled in
891 which parts of a Perl program.  It's a more flexible alternative for
892 both the command line flag B<-w> and the equivalent Perl variable,
893 C<$^W>.
894
895 This pragma works just like the C<strict> pragma.
896 This means that the scope of the warning pragma is limited to the
897 enclosing block.  It also means that the pragma setting will not
898 leak across files (via C<use>, C<require> or C<do>).  This allows
899 authors to independently define the degree of warning checks that will
900 be applied to their module.
901
902 By default, optional warnings are disabled, so any legacy code that
903 doesn't attempt to control the warnings will work unchanged.
904
905 All warnings are enabled in a block by either of these:
906
907     use warnings;
908     use warnings 'all';
909
910 Similarly all warnings are disabled in a block by either of these:
911
912     no warnings;
913     no warnings 'all';
914
915 For example, consider the code below:
916
917     use warnings;
918     my @x;
919     {
920         no warnings;
921         my $y = @x[0];
922     }
923     my $z = @x[0];
924
925 The code in the enclosing block has warnings enabled, but the inner
926 block has them disabled.  In this case that means the assignment to the
927 scalar C<$z> will trip the C<"Scalar value @x[0] better written as $x[0]">
928 warning, but the assignment to the scalar C<$y> will not.
929
930 =head2 Default Warnings and Optional Warnings
931
932 Before the introduction of lexical warnings, Perl had two classes of
933 warnings: mandatory and optional.
934
935 As its name suggests, if your code tripped a mandatory warning, you
936 would get a warning whether you wanted it or not.
937 For example, the code below would always produce an C<"isn't numeric">
938 warning about the "2:".
939
940     my $x = "2:" + 3;
941
942 With the introduction of lexical warnings, mandatory warnings now become
943 I<default> warnings.  The difference is that although the previously
944 mandatory warnings are still enabled by default, they can then be
945 subsequently enabled or disabled with the lexical warning pragma.  For
946 example, in the code below, an C<"isn't numeric"> warning will only
947 be reported for the C<$x> variable.
948
949     my $x = "2:" + 3;
950     no warnings;
951     my $y = "2:" + 3;
952
953 Note that neither the B<-w> flag or the C<$^W> can be used to
954 disable/enable default warnings.  They are still mandatory in this case.
955
956 =head2 What's wrong with B<-w> and C<$^W>
957
958 Although very useful, the big problem with using B<-w> on the command
959 line to enable warnings is that it is all or nothing.  Take the typical
960 scenario when you are writing a Perl program.  Parts of the code you
961 will write yourself, but it's very likely that you will make use of
962 pre-written Perl modules.  If you use the B<-w> flag in this case, you
963 end up enabling warnings in pieces of code that you haven't written.
964
965 Similarly, using C<$^W> to either disable or enable blocks of code is
966 fundamentally flawed.  For a start, say you want to disable warnings in
967 a block of code.  You might expect this to be enough to do the trick:
968
969      {
970          local ($^W) = 0;
971          my $x =+ 2;
972          my $y; chop $y;
973      }
974
975 When this code is run with the B<-w> flag, a warning will be produced
976 for the C<$x> line:  C<"Reversed += operator">.
977
978 The problem is that Perl has both compile-time and run-time warnings.  To
979 disable compile-time warnings you need to rewrite the code like this:
980
981      {
982          BEGIN { $^W = 0 }
983          my $x =+ 2;
984          my $y; chop $y;
985      }
986
987 And note that unlike the first example, this will permanently set C<$^W>
988 since it cannot both run during compile-time and be localized to a
989 run-time block.
990
991 The other big problem with C<$^W> is the way you can inadvertently
992 change the warning setting in unexpected places in your code.  For example,
993 when the code below is run (without the B<-w> flag), the second call
994 to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas
995 the first will not.
996
997     sub doit
998     {
999         my $y; chop $y;
1000     }
1001
1002     doit();
1003
1004     {
1005         local ($^W) = 1;
1006         doit()
1007     }
1008
1009 This is a side-effect of C<$^W> being dynamically scoped.
1010
1011 Lexical warnings get around these limitations by allowing finer control
1012 over where warnings can or can't be tripped.
1013
1014 =head2 Controlling Warnings from the Command Line
1015
1016 There are three Command Line flags that can be used to control when
1017 warnings are (or aren't) produced:
1018
1019 =over 5
1020
1021 =item B<-w>
1022 X<-w>
1023
1024 This is  the existing flag.  If the lexical warnings pragma is B<not>
1025 used in any of your code, or any of the modules that you use, this flag
1026 will enable warnings everywhere.  See L</Backward Compatibility> for
1027 details of how this flag interacts with lexical warnings.
1028
1029 =item B<-W>
1030 X<-W>
1031
1032 If the B<-W> flag is used on the command line, it will enable all warnings
1033 throughout the program regardless of whether warnings were disabled
1034 locally using C<no warnings> or C<$^W =0>.
1035 This includes all files that get
1036 included via C<use>, C<require> or C<do>.
1037 Think of it as the Perl equivalent of the "lint" command.
1038
1039 =item B<-X>
1040 X<-X>
1041
1042 Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
1043
1044 =back
1045
1046 =head2 Backward Compatibility
1047
1048 If you are used to working with a version of Perl prior to the
1049 introduction of lexically scoped warnings, or have code that uses both
1050 lexical warnings and C<$^W>, this section will describe how they interact.
1051
1052 How Lexical Warnings interact with B<-w>/C<$^W>:
1053
1054 =over 5
1055
1056 =item 1.
1057
1058 If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
1059 control warnings is used and neither C<$^W> nor the C<warnings> pragma
1060 are used, then default warnings will be enabled and optional warnings
1061 disabled.
1062 This means that legacy code that doesn't attempt to control the warnings
1063 will work unchanged.
1064
1065 =item 2.
1066
1067 The B<-w> flag just sets the global C<$^W> variable as in 5.005.  This
1068 means that any legacy code that currently relies on manipulating C<$^W>
1069 to control warning behavior will still work as is.
1070
1071 =item 3.
1072
1073 Apart from now being a boolean, the C<$^W> variable operates in exactly
1074 the same horrible uncontrolled global way, except that it cannot
1075 disable/enable default warnings.
1076
1077 =item 4.
1078
1079 If a piece of code is under the control of the C<warnings> pragma,
1080 both the C<$^W> variable and the B<-w> flag will be ignored for the
1081 scope of the lexical warning.
1082
1083 =item 5.
1084
1085 The only way to override a lexical warnings setting is with the B<-W>
1086 or B<-X> command line flags.
1087
1088 =back
1089
1090 The combined effect of 3 & 4 is that it will allow code which uses
1091 the C<warnings> pragma to control the warning behavior of $^W-type
1092 code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
1093
1094 =head2 Category Hierarchy
1095 X<warning, categories>
1096
1097 A hierarchy of "categories" have been defined to allow groups of warnings
1098 to be enabled/disabled in isolation.
1099
1100 The current hierarchy is:
1101
1102 =for warnings.pl tree-goes-here
1103
1104 Just like the "strict" pragma any of these categories can be combined
1105
1106     use warnings qw(void redefine);
1107     no warnings qw(io syntax untie);
1108
1109 Also like the "strict" pragma, if there is more than one instance of the
1110 C<warnings> pragma in a given scope the cumulative effect is additive.
1111
1112     use warnings qw(void); # only "void" warnings enabled
1113     ...
1114     use warnings qw(io);   # only "void" & "io" warnings enabled
1115     ...
1116     no warnings qw(void);  # only "io" warnings enabled
1117
1118 To determine which category a specific warning has been assigned to see
1119 L<perldiag>.
1120
1121 Note: Before Perl 5.8.0, the lexical warnings category "deprecated" was a
1122 sub-category of the "syntax" category.  It is now a top-level category
1123 in its own right.
1124
1125 Note: Before 5.21.0, the "missing" lexical warnings category was
1126 internally defined to be the same as the "uninitialized" category. It
1127 is now a top-level category in its own right.
1128
1129 =head2 Fatal Warnings
1130 X<warning, fatal>
1131
1132 The presence of the word "FATAL" in the category list will escalate
1133 warnings in those categories into fatal errors in that lexical scope.
1134
1135 B<NOTE:> FATAL warnings should be used with care, particularly
1136 C<< FATAL => 'all' >>.
1137
1138 Libraries using L<warnings::warn|/FUNCTIONS> for custom warning categories
1139 generally don't expect L<warnings::warn|/FUNCTIONS> to be fatal and can wind up
1140 in an unexpected state as a result.  For XS modules issuing categorized
1141 warnings, such unanticipated exceptions could also expose memory leak bugs.
1142
1143 Moreover, the Perl interpreter itself has had serious bugs involving
1144 fatalized warnings.  For a summary of resolved and unresolved problems as
1145 of January 2015, please see
1146 L<this perl5-porters post|http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225235.html>.
1147
1148 While some developers find fatalizing some warnings to be a useful
1149 defensive programming technique, using C<< FATAL => 'all' >> to fatalize
1150 all possible warning categories -- including custom ones -- is particularly
1151 risky.  Therefore, the use of C<< FATAL => 'all' >> is
1152 L<discouraged|perlpolicy/discouraged>.
1153
1154 The L<strictures|strictures/VERSION-2> module on CPAN offers one example of
1155 a warnings subset that the module's authors believe is relatively safe to
1156 fatalize.
1157
1158 B<NOTE:> users of FATAL warnings, especially those using
1159 C<< FATAL => 'all' >>, should be fully aware that they are risking future
1160 portability of their programs by doing so.  Perl makes absolutely no
1161 commitments to not introduce new warnings or warnings categories in the
1162 future; indeed, we explicitly reserve the right to do so.  Code that may
1163 not warn now may warn in a future release of Perl if the Perl5 development
1164 team deems it in the best interests of the community to do so.  Should code
1165 using FATAL warnings break due to the introduction of a new warning we will
1166 NOT consider it an incompatible change.  Users of FATAL warnings should
1167 take special caution during upgrades to check to see if their code triggers
1168 any new warnings and should pay particular attention to the fine print of
1169 the documentation of the features they use to ensure they do not exploit
1170 features that are documented as risky, deprecated, or unspecified, or where
1171 the documentation says "so don't do that", or anything with the same sense
1172 and spirit.  Use of such features in combination with FATAL warnings is
1173 ENTIRELY AT THE USER'S RISK.
1174
1175 The following documentation describes how to use FATAL warnings but the
1176 perl5 porters strongly recommend that you understand the risks before doing
1177 so, especially for library code intended for use by others, as there is no
1178 way for downstream users to change the choice of fatal categories.
1179
1180 In the code below, the use of C<time>, C<length>
1181 and C<join> can all produce a C<"Useless use of xxx in void context">
1182 warning.
1183
1184     use warnings;
1185
1186     time;
1187
1188     {
1189         use warnings FATAL => qw(void);
1190         length "abc";
1191     }
1192
1193     join "", 1,2,3;
1194
1195     print "done\n";
1196
1197 When run it produces this output
1198
1199     Useless use of time in void context at fatal line 3.
1200     Useless use of length in void context at fatal line 7.
1201
1202 The scope where C<length> is used has escalated the C<void> warnings
1203 category into a fatal error, so the program terminates immediately when it
1204 encounters the warning.
1205
1206 To explicitly turn off a "FATAL" warning you just disable the warning
1207 it is associated with.  So, for example, to disable the "void" warning
1208 in the example above, either of these will do the trick:
1209
1210     no warnings qw(void);
1211     no warnings FATAL => qw(void);
1212
1213 If you want to downgrade a warning that has been escalated into a fatal
1214 error back to a normal warning, you can use the "NONFATAL" keyword.  For
1215 example, the code below will promote all warnings into fatal errors,
1216 except for those in the "syntax" category.
1217
1218     use warnings FATAL => 'all', NONFATAL => 'syntax';
1219
1220 As of Perl 5.20, instead of C<< use warnings FATAL => 'all'; >> you can
1221 use:
1222
1223    use v5.20;       # Perl 5.20 or greater is required for the following
1224    use warnings 'FATAL';  # short form of "use warnings FATAL => 'all';"
1225
1226 If you want your program to be compatible with versions of Perl before
1227 5.20, you must use C<< use warnings FATAL => 'all'; >> instead.  (In
1228 previous versions of Perl, the behavior of the statements
1229 C<< use warnings 'FATAL'; >>, C<< use warnings 'NONFATAL'; >> and
1230 C<< no warnings 'FATAL'; >> was unspecified; they did not behave as if
1231 they included the C<< => 'all' >> portion.  As of 5.20, they do.)
1232
1233 =head2 Reporting Warnings from a Module
1234 X<warning, reporting> X<warning, registering>
1235
1236 The C<warnings> pragma provides a number of functions that are useful for
1237 module authors.  These are used when you want to report a module-specific
1238 warning to a calling module has enabled warnings via the C<warnings>
1239 pragma.
1240
1241 Consider the module C<MyMod::Abc> below.
1242
1243     package MyMod::Abc;
1244
1245     use warnings::register;
1246
1247     sub open {
1248         my $path = shift;
1249         if ($path !~ m#^/#) {
1250             warnings::warn("changing relative path to /var/abc")
1251                 if warnings::enabled();
1252             $path = "/var/abc/$path";
1253         }
1254     }
1255
1256     1;
1257
1258 The call to C<warnings::register> will create a new warnings category
1259 called "MyMod::Abc", i.e. the new category name matches the current
1260 package name.  The C<open> function in the module will display a warning
1261 message if it gets given a relative path as a parameter.  This warnings
1262 will only be displayed if the code that uses C<MyMod::Abc> has actually
1263 enabled them with the C<warnings> pragma like below.
1264
1265     use MyMod::Abc;
1266     use warnings 'MyMod::Abc';
1267     ...
1268     abc::open("../fred.txt");
1269
1270 It is also possible to test whether the pre-defined warnings categories are
1271 set in the calling module with the C<warnings::enabled> function.  Consider
1272 this snippet of code:
1273
1274     package MyMod::Abc;
1275
1276     sub open {
1277         if (warnings::enabled("deprecated")) {
1278             warnings::warn("deprecated",
1279                            "open is deprecated, use new instead");
1280         }
1281         new(@_);
1282     }
1283
1284     sub new
1285     ...
1286     1;
1287
1288 The function C<open> has been deprecated, so code has been included to
1289 display a warning message whenever the calling module has (at least) the
1290 "deprecated" warnings category enabled.  Something like this, say.
1291
1292     use warnings 'deprecated';
1293     use MyMod::Abc;
1294     ...
1295     MyMod::Abc::open($filename);
1296
1297 Either the C<warnings::warn> or C<warnings::warnif> function should be
1298 used to actually display the warnings message.  This is because they can
1299 make use of the feature that allows warnings to be escalated into fatal
1300 errors.  So in this case
1301
1302     use MyMod::Abc;
1303     use warnings FATAL => 'MyMod::Abc';
1304     ...
1305     MyMod::Abc::open('../fred.txt');
1306
1307 the C<warnings::warnif> function will detect this and die after
1308 displaying the warning message.
1309
1310 The three warnings functions, C<warnings::warn>, C<warnings::warnif>
1311 and C<warnings::enabled> can optionally take an object reference in place
1312 of a category name.  In this case the functions will use the class name
1313 of the object as the warnings category.
1314
1315 Consider this example:
1316
1317     package Original;
1318
1319     no warnings;
1320     use warnings::register;
1321
1322     sub new
1323     {
1324         my $class = shift;
1325         bless [], $class;
1326     }
1327
1328     sub check
1329     {
1330         my $self = shift;
1331         my $value = shift;
1332
1333         if ($value % 2 && warnings::enabled($self))
1334           { warnings::warn($self, "Odd numbers are unsafe") }
1335     }
1336
1337     sub doit
1338     {
1339         my $self = shift;
1340         my $value = shift;
1341         $self->check($value);
1342         # ...
1343     }
1344
1345     1;
1346
1347     package Derived;
1348
1349     use warnings::register;
1350     use Original;
1351     our @ISA = qw( Original );
1352     sub new
1353     {
1354         my $class = shift;
1355         bless [], $class;
1356     }
1357
1358
1359     1;
1360
1361 The code below makes use of both modules, but it only enables warnings from
1362 C<Derived>.
1363
1364     use Original;
1365     use Derived;
1366     use warnings 'Derived';
1367     my $x = Original->new();
1368     $x->doit(1);
1369     my $y = Derived->new();
1370     $x->doit(1);
1371
1372 When this code is run only the C<Derived> object, C<$y>, will generate
1373 a warning.
1374
1375     Odd numbers are unsafe at main.pl line 7
1376
1377 Notice also that the warning is reported at the line where the object is first
1378 used.
1379
1380 When registering new categories of warning, you can supply more names to
1381 warnings::register like this:
1382
1383     package MyModule;
1384     use warnings::register qw(format precision);
1385
1386     ...
1387
1388     warnings::warnif('MyModule::format', '...');
1389
1390 =head1 FUNCTIONS
1391
1392 Note: The functions with names ending in C<_at_level> were added in Perl
1393 5.28.
1394
1395 =over 4
1396
1397 =item use warnings::register
1398
1399 Creates a new warnings category with the same name as the package where
1400 the call to the pragma is used.
1401
1402 =item warnings::enabled()
1403
1404 Use the warnings category with the same name as the current package.
1405
1406 Return TRUE if that warnings category is enabled in the calling module.
1407 Otherwise returns FALSE.
1408
1409 =item warnings::enabled($category)
1410
1411 Return TRUE if the warnings category, C<$category>, is enabled in the
1412 calling module.
1413 Otherwise returns FALSE.
1414
1415 =item warnings::enabled($object)
1416
1417 Use the name of the class for the object reference, C<$object>, as the
1418 warnings category.
1419
1420 Return TRUE if that warnings category is enabled in the first scope
1421 where the object is used.
1422 Otherwise returns FALSE.
1423
1424 =item warnings::enabled_at_level($category, $level)
1425
1426 Like C<warnings::enabled>, but $level specifies the exact call frame, 0
1427 being the immediate caller.
1428
1429 =item warnings::fatal_enabled()
1430
1431 Return TRUE if the warnings category with the same name as the current
1432 package has been set to FATAL in the calling module.
1433 Otherwise returns FALSE.
1434
1435 =item warnings::fatal_enabled($category)
1436
1437 Return TRUE if the warnings category C<$category> has been set to FATAL in
1438 the calling module.
1439 Otherwise returns FALSE.
1440
1441 =item warnings::fatal_enabled($object)
1442
1443 Use the name of the class for the object reference, C<$object>, as the
1444 warnings category.
1445
1446 Return TRUE if that warnings category has been set to FATAL in the first
1447 scope where the object is used.
1448 Otherwise returns FALSE.
1449
1450 =item warnings::fatal_enabled_at_level($category, $level)
1451
1452 Like C<warnings::fatal_enabled>, but $level specifies the exact call frame,
1453 0 being the immediate caller.
1454
1455 =item warnings::warn($message)
1456
1457 Print C<$message> to STDERR.
1458
1459 Use the warnings category with the same name as the current package.
1460
1461 If that warnings category has been set to "FATAL" in the calling module
1462 then die. Otherwise return.
1463
1464 =item warnings::warn($category, $message)
1465
1466 Print C<$message> to STDERR.
1467
1468 If the warnings category, C<$category>, has been set to "FATAL" in the
1469 calling module then die. Otherwise return.
1470
1471 =item warnings::warn($object, $message)
1472
1473 Print C<$message> to STDERR.
1474
1475 Use the name of the class for the object reference, C<$object>, as the
1476 warnings category.
1477
1478 If that warnings category has been set to "FATAL" in the scope where C<$object>
1479 is first used then die. Otherwise return.
1480
1481 =item warnings::warn_at_level($category, $level, $message)
1482
1483 Like C<warnings::warn>, but $level specifies the exact call frame,
1484 0 being the immediate caller.
1485
1486 =item warnings::warnif($message)
1487
1488 Equivalent to:
1489
1490     if (warnings::enabled())
1491       { warnings::warn($message) }
1492
1493 =item warnings::warnif($category, $message)
1494
1495 Equivalent to:
1496
1497     if (warnings::enabled($category))
1498       { warnings::warn($category, $message) }
1499
1500 =item warnings::warnif($object, $message)
1501
1502 Equivalent to:
1503
1504     if (warnings::enabled($object))
1505       { warnings::warn($object, $message) }
1506
1507 =item warnings::warnif_at_level($category, $level, $message)
1508
1509 Like C<warnings::warnif>, but $level specifies the exact call frame,
1510 0 being the immediate caller.
1511
1512 =item warnings::register_categories(@names)
1513
1514 This registers warning categories for the given names and is primarily for
1515 use by the warnings::register pragma.
1516
1517 =back
1518
1519 See also L<perlmodlib/Pragmatic Modules> and L<perldiag>.
1520
1521 =cut