This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ff08a2f0ce32864644e3c0c0f447f69ab32c8a97
[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.44';
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                         }],
117
118         'missing'       => [ 5.021, DEFAULT_OFF],
119         'redundant'     => [ 5.021, DEFAULT_OFF],
120         'locale'        => [ 5.021, DEFAULT_ON],
121         'shadow'        => [ 5.027, DEFAULT_OFF],
122
123          #'default'     => [ 5.008, DEFAULT_ON ],
124 }]};
125
126 my @def ;
127 my %list ;
128 my %Value ;
129 my %ValueToName ;
130 my %NameToValue ;
131
132 my %v_list = () ;
133
134 sub valueWalk
135 {
136     my $tre = shift ;
137     my @list = () ;
138     my ($k, $v) ;
139
140     foreach $k (sort keys %$tre) {
141         $v = $tre->{$k};
142         die "duplicate key $k\n" if defined $list{$k} ;
143         die "Value associated with key '$k' is not an ARRAY reference"
144             if !ref $v || ref $v ne 'ARRAY' ;
145
146         my ($ver, $rest) = @{ $v } ;
147         push @{ $v_list{$ver} }, $k;
148
149         if (ref $rest)
150           { valueWalk ($rest) }
151
152     }
153
154 }
155
156 sub orderValues
157 {
158     my $index = 0;
159     foreach my $ver ( sort { $a <=> $b } keys %v_list ) {
160         foreach my $name (@{ $v_list{$ver} } ) {
161             $ValueToName{ $index } = [ uc $name, $ver ] ;
162             $NameToValue{ uc $name } = $index ++ ;
163         }
164     }
165
166     return $index ;
167 }
168
169 ###########################################################################
170
171 sub walk
172 {
173     my $tre = shift ;
174     my @list = () ;
175     my ($k, $v) ;
176
177     foreach $k (sort keys %$tre) {
178         $v = $tre->{$k};
179         die "duplicate key $k\n" if defined $list{$k} ;
180         die "Can't find key '$k'"
181             if ! defined $NameToValue{uc $k} ;
182         push @{ $list{$k} }, $NameToValue{uc $k} ;
183         die "Value associated with key '$k' is not an ARRAY reference"
184             if !ref $v || ref $v ne 'ARRAY' ;
185
186         my ($ver, $rest) = @{ $v } ;
187         if (ref $rest)
188           { push (@{ $list{$k} }, walk ($rest)) }
189         elsif ($rest == DEFAULT_ON)
190           { push @def, $NameToValue{uc $k} }
191
192         push @list, @{ $list{$k} } ;
193     }
194
195    return @list ;
196 }
197
198 ###########################################################################
199
200 sub mkRange
201 {
202     my @a = @_ ;
203     my @out = @a ;
204
205     for my $i (1 .. @a - 1) {
206         $out[$i] = ".."
207           if $a[$i] == $a[$i - 1] + 1
208              && ($i >= @a  - 1 || $a[$i] + 1 == $a[$i + 1] );
209     }
210     $out[-1] = $a[-1] if $out[-1] eq "..";
211
212     my $out = join(",",@out);
213
214     $out =~ s/,(\.\.,)+/../g ;
215     return $out;
216 }
217
218 ###########################################################################
219 sub warningsTree
220 {
221     my $tre = shift ;
222     my $prefix = shift ;
223     my ($k, $v) ;
224
225     my $max = (sort {$a <=> $b} map { length $_ } keys %$tre)[-1] ;
226     my @keys = sort keys %$tre ;
227
228     my $rv = '';
229
230     while ($k = shift @keys) {
231         $v = $tre->{$k};
232         die "Value associated with key '$k' is not an ARRAY reference"
233             if !ref $v || ref $v ne 'ARRAY' ;
234
235         my $offset ;
236         if ($tre ne $tree) {
237             $rv .= $prefix . "|\n" ;
238             $rv .= $prefix . "+- $k" ;
239             $offset = ' ' x ($max + 4) ;
240         }
241         else {
242             $rv .= $prefix . "$k" ;
243             $offset = ' ' x ($max + 1) ;
244         }
245
246         my ($ver, $rest) = @{ $v } ;
247         if (ref $rest)
248         {
249             my $bar = @keys ? "|" : " ";
250             $rv .= " -" . "-" x ($max - length $k ) . "+\n" ;
251             $rv .= warningsTree ($rest, $prefix . $bar . $offset )
252         }
253         else
254           { $rv .= "\n" }
255     }
256
257     return $rv;
258 }
259
260 ###########################################################################
261
262 sub mkHexOct
263 {
264     my ($f, $max, @a) = @_ ;
265     my $mask = "\x00" x $max ;
266     my $string = "" ;
267
268     foreach (@a) {
269         vec($mask, $_, 1) = 1 ;
270     }
271
272     foreach (unpack("C*", $mask)) {
273         if ($f eq 'x') {
274             $string .= '\x' . sprintf("%2.2x", $_)
275         }
276         else {
277             $string .= '\\' . sprintf("%o", $_)
278         }
279     }
280     return $string ;
281 }
282
283 sub mkHex
284 {
285     my($max, @a) = @_;
286     return mkHexOct("x", $max, @a);
287 }
288
289 sub mkOct
290 {
291     my($max, @a) = @_;
292     return mkHexOct("o", $max, @a);
293 }
294
295 ###########################################################################
296
297 if (@ARGV && $ARGV[0] eq "tree")
298 {
299     print warningsTree($tree, "    ") ;
300     exit ;
301 }
302
303 my ($warn, $pm) = map {
304     open_new($_, '>', { by => 'regen/warnings.pl' });
305 } 'warnings.h', 'lib/warnings.pm';
306
307 my ($index, $warn_size);
308
309 {
310   # generate warnings.h
311
312   print $warn <<'EOM';
313
314 #define Off(x)                  ((x) / 8)
315 #define Bit(x)                  (1 << ((x) % 8))
316 #define IsSet(a, x)             ((a)[Off(x)] & Bit(x))
317
318
319 #define G_WARN_OFF              0       /* $^W == 0 */
320 #define G_WARN_ON               1       /* -w flag and $^W != 0 */
321 #define G_WARN_ALL_ON           2       /* -W flag */
322 #define G_WARN_ALL_OFF          4       /* -X flag */
323 #define G_WARN_ONCE             8       /* set if 'once' ever enabled */
324 #define G_WARN_ALL_MASK         (G_WARN_ALL_ON|G_WARN_ALL_OFF)
325
326 #define pWARN_STD               NULL
327 #define pWARN_ALL               (STRLEN *) &PL_WARN_ALL    /* use warnings 'all' */
328 #define pWARN_NONE              (STRLEN *) &PL_WARN_NONE   /* no  warnings 'all' */
329
330 #define specialWARN(x)          ((x) == pWARN_STD || (x) == pWARN_ALL ||        \
331                                  (x) == pWARN_NONE)
332
333 /* if PL_warnhook is set to this value, then warnings die */
334 #define PERL_WARNHOOK_FATAL     (&PL_sv_placeholder)
335 EOM
336
337   my $offset = 0 ;
338
339   valueWalk ($tree) ;
340   $index = orderValues();
341
342   die <<EOM if $index > 255 ;
343 Too many warnings categories -- max is 255
344     rewrite packWARN* & unpackWARN* macros
345 EOM
346
347   walk ($tree) ;
348   for (my $i = $index; $i & 3; $i++) {
349       push @{$list{all}}, $i;
350   }
351
352   $index *= 2 ;
353   $warn_size = int($index / 8) + ($index % 8 != 0) ;
354
355   my $k ;
356   my $last_ver = 0;
357   foreach $k (sort { $a <=> $b } keys %ValueToName) {
358       my ($name, $version) = @{ $ValueToName{$k} };
359       print $warn "\n/* Warnings Categories added in Perl $version */\n\n"
360           if $last_ver != $version ;
361       $name =~ y/:/_/;
362       print $warn tab(6, "#define WARN_$name"), " $k\n" ;
363       $last_ver = $version ;
364   }
365   print $warn "\n" ;
366
367   print $warn tab(6, '#define WARNsize'),       " $warn_size\n" ;
368   print $warn tab(6, '#define WARN_ALLstring'), ' "', ('\125' x $warn_size) , "\"\n" ;
369   print $warn tab(6, '#define WARN_NONEstring'), ' "', ('\0' x $warn_size) , "\"\n" ;
370
371   print $warn <<'EOM';
372
373 #define isLEXWARN_on \
374         cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD)
375 #define isLEXWARN_off \
376         cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD)
377 #define isWARN_ONCE     (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
378 #define isWARN_on(c,x)  (IsSet((U8 *)(c + 1), 2*(x)))
379 #define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
380
381 #define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
382
383 /*
384
385 =head1 Warning and Dieing
386
387 =for apidoc Am|bool|ckWARN|U32 w
388
389 Returns a boolean as to whether or not warnings are enabled for the warning
390 category C<w>.  If the category is by default enabled even if not within the
391 scope of S<C<use warnings>>, instead use the L</ckWARN_d> macro.
392
393 =for apidoc Am|bool|ckWARN_d|U32 w
394
395 Like C<L</ckWARN>>, but for use if and only if the warning category is by
396 default enabled even if not within the scope of S<C<use warnings>>.
397
398 =for apidoc Am|bool|ckWARN2|U32 w1|U32 w2
399
400 Like C<L</ckWARN>>, but takes two warnings categories as input, and returns
401 TRUE if either is enabled.  If either category is by default enabled even if
402 not within the scope of S<C<use warnings>>, instead use the L</ckWARN2_d>
403 macro.  The categories must be completely independent, one may not be
404 subclassed from the other.
405
406 =for apidoc Am|bool|ckWARN2_d|U32 w1|U32 w2
407
408 Like C<L</ckWARN2>>, but for use if and only if either warning category is by
409 default enabled even if not within the scope of S<C<use warnings>>.
410
411 =for apidoc Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3
412
413 Like C<L</ckWARN2>>, but takes three warnings categories as input, and returns
414 TRUE if any is enabled.  If any of the categories is by default enabled even
415 if not within the scope of S<C<use warnings>>, instead use the L</ckWARN3_d>
416 macro.  The categories must be completely independent, one may not be
417 subclassed from any other.
418
419 =for apidoc Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
420
421 Like C<L</ckWARN3>>, but for use if and only if any of the warning categories
422 is by default enabled even if not within the scope of S<C<use warnings>>.
423
424 =for apidoc Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
425
426 Like C<L</ckWARN3>>, but takes four warnings categories as input, and returns
427 TRUE if any is enabled.  If any of the categories is by default enabled even
428 if not within the scope of S<C<use warnings>>, instead use the L</ckWARN4_d>
429 macro.  The categories must be completely independent, one may not be
430 subclassed from any other.
431
432 =for apidoc Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
433
434 Like C<L</ckWARN4>>, but for use if and only if any of the warning categories
435 is by default enabled even if not within the scope of S<C<use warnings>>.
436
437 =cut
438
439 */
440
441 #define ckWARN(w)               Perl_ckwarn(aTHX_ packWARN(w))
442
443 /* The w1, w2 ... should be independent warnings categories; one shouldn't be
444  * a subcategory of any other */
445
446 #define ckWARN2(w1,w2)          Perl_ckwarn(aTHX_ packWARN2(w1,w2))
447 #define ckWARN3(w1,w2,w3)       Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
448 #define ckWARN4(w1,w2,w3,w4)    Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
449
450 #define ckWARN_d(w)             Perl_ckwarn_d(aTHX_ packWARN(w))
451 #define ckWARN2_d(w1,w2)        Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
452 #define ckWARN3_d(w1,w2,w3)     Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
453 #define ckWARN4_d(w1,w2,w3,w4)  Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
454
455 #define WARNshift               8
456
457 #define packWARN(a)             (a                                      )
458
459 /* The a, b, ... should be independent warnings categories; one shouldn't be
460  * a subcategory of any other */
461
462 #define packWARN2(a,b)          ((a) | ((b)<<8)                         )
463 #define packWARN3(a,b,c)        ((a) | ((b)<<8) | ((c)<<16)             )
464 #define packWARN4(a,b,c,d)      ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
465
466 #define unpackWARN1(x)          ((x)        & 0xFF)
467 #define unpackWARN2(x)          (((x) >>8)  & 0xFF)
468 #define unpackWARN3(x)          (((x) >>16) & 0xFF)
469 #define unpackWARN4(x)          (((x) >>24) & 0xFF)
470
471 #define ckDEAD(x)                                                       \
472    (PL_curcop &&                                                        \
473     !specialWARN(PL_curcop->cop_warnings) &&                            \
474     (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) ||             \
475       (unpackWARN2(x) &&                                                \
476         (isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) ||         \
477           (unpackWARN3(x) &&                                            \
478             (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) ||     \
479               (unpackWARN4(x) &&                                        \
480                 isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x)))))))))
481
482 /* end of file warnings.h */
483 EOM
484
485   read_only_bottom_close_and_rename($warn);
486 }
487
488 while (<DATA>) {
489     last if /^VERSION$/ ;
490     print $pm $_ ;
491 }
492
493 print $pm qq(our \$VERSION = "$::VERSION";\n);
494
495 while (<DATA>) {
496     last if /^KEYWORDS$/ ;
497     print $pm $_ ;
498 }
499
500 my $last_ver = 0;
501 print $pm "our %Offsets = (" ;
502 foreach my $k (sort { $a <=> $b } keys %ValueToName) {
503     my ($name, $version) = @{ $ValueToName{$k} };
504     $name = lc $name;
505     $k *= 2 ;
506     if ( $last_ver != $version ) {
507         print $pm "\n";
508         print $pm tab(6, "    # Warnings Categories added in Perl $version");
509         print $pm "\n";
510     }
511     print $pm tab(6, "    '$name'"), "=> $k,\n" ;
512     $last_ver = $version;
513 }
514
515 print $pm ");\n\n" ;
516
517 print $pm "our %Bits = (\n" ;
518 foreach my $k (sort keys  %list) {
519
520     my $v = $list{$k} ;
521     my @list = sort { $a <=> $b } @$v ;
522
523     print $pm tab(6, "    '$k'"), '=> "',
524                 mkHex($warn_size, map $_ * 2 , @list),
525                 '", # [', mkRange(@list), "]\n" ;
526 }
527
528 print $pm ");\n\n" ;
529
530 print $pm "our %DeadBits = (\n" ;
531 foreach my $k (sort keys  %list) {
532
533     my $v = $list{$k} ;
534     my @list = sort { $a <=> $b } @$v ;
535
536     print $pm tab(6, "    '$k'"), '=> "',
537                 mkHex($warn_size, map $_ * 2 + 1 , @list),
538                 '", # [', mkRange(@list), "]\n" ;
539 }
540
541 print $pm ");\n\n" ;
542 print $pm "# These are used by various things, including our own tests\n";
543 print $pm tab(6, 'our $NONE'), '=  "', ('\0' x $warn_size) , "\";\n" ;
544 print $pm tab(6, 'our $DEFAULT'), '=  "', mkHex($warn_size, map $_ * 2, @def),
545                            '", # [', mkRange(sort { $a <=> $b } @def), "]\n" ;
546 print $pm tab(6, 'our $LAST_BIT'), '=  ' . "$index ;\n" ;
547 print $pm tab(6, 'our $BYTES'),    '=  ' . "$warn_size ;\n" ;
548 while (<DATA>) {
549     if ($_ eq "=for warnings.pl tree-goes-here\n") {
550       print $pm warningsTree($tree, "    ");
551       next;
552     }
553     print $pm $_ ;
554 }
555
556 read_only_bottom_close_and_rename($pm);
557
558 __END__
559 package warnings;
560
561 VERSION
562
563 # Verify that we're called correctly so that warnings will work.
564 # Can't use Carp, since Carp uses us!
565 # String regexps because constant folding = smaller optree = less memory vs regexp literal
566 # see also strict.pm.
567 die sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2]
568     if __FILE__ !~ ( '(?x) \b     '.__PACKAGE__.'  \.pmc? \z' )
569     && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' );
570
571 KEYWORDS
572
573 sub Croaker
574 {
575     require Carp; # this initializes %CarpInternal
576     local $Carp::CarpInternal{'warnings'};
577     delete $Carp::CarpInternal{'warnings'};
578     Carp::croak(@_);
579 }
580
581 sub _expand_bits {
582     my $bits = shift;
583     my $want_len = ($LAST_BIT + 7) >> 3;
584     my $len = length($bits);
585     if ($len != $want_len) {
586         if ($bits eq "") {
587             $bits = "\x00" x $want_len;
588         } elsif ($len > $want_len) {
589             substr $bits, $want_len, $len-$want_len, "";
590         } else {
591             my $a = vec($bits, $Offsets{all} >> 1, 2);
592             $a |= $a << 2;
593             $a |= $a << 4;
594             $bits .= chr($a) x ($want_len - $len);
595         }
596     }
597     return $bits;
598 }
599
600 sub _bits {
601     my $mask = shift ;
602     my $catmask ;
603     my $fatal = 0 ;
604     my $no_fatal = 0 ;
605
606     $mask = _expand_bits($mask);
607     foreach my $word ( @_ ) {
608         if ($word eq 'FATAL') {
609             $fatal = 1;
610             $no_fatal = 0;
611         }
612         elsif ($word eq 'NONFATAL') {
613             $fatal = 0;
614             $no_fatal = 1;
615         }
616         elsif ($catmask = $Bits{$word}) {
617             $mask |= $catmask ;
618             $mask |= $DeadBits{$word} if $fatal ;
619             $mask = ~(~$mask | $DeadBits{$word}) if $no_fatal ;
620         }
621         else
622           { Croaker("Unknown warnings category '$word'")}
623     }
624
625     return $mask ;
626 }
627
628 sub bits
629 {
630     # called from B::Deparse.pm
631     push @_, 'all' unless @_ ;
632     return _bits("", @_) ;
633 }
634
635 sub import
636 {
637     shift;
638
639     my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
640
641     # append 'all' when implied (empty import list or after a lone
642     # "FATAL" or "NONFATAL")
643     push @_, 'all'
644         if !@_ || (@_==1 && ($_[0] eq 'FATAL' || $_[0] eq 'NONFATAL'));
645
646     ${^WARNING_BITS} = _bits($mask, @_);
647 }
648
649 sub unimport
650 {
651     shift;
652
653     my $catmask ;
654     my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
655
656     # append 'all' when implied (empty import list or after a lone "FATAL")
657     push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
658
659     $mask = _expand_bits($mask);
660     foreach my $word ( @_ ) {
661         if ($word eq 'FATAL') {
662             next;
663         }
664         elsif ($catmask = $Bits{$word}) {
665             $mask = ~(~$mask | $catmask | $DeadBits{$word});
666         }
667         else
668           { Croaker("Unknown warnings category '$word'")}
669     }
670
671     ${^WARNING_BITS} = $mask ;
672 }
673
674 my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
675
676 sub LEVEL () { 8 };
677 sub MESSAGE () { 4 };
678 sub FATAL () { 2 };
679 sub NORMAL () { 1 };
680
681 sub __chk
682 {
683     my $category ;
684     my $offset ;
685     my $isobj = 0 ;
686     my $wanted = shift;
687     my $has_message = $wanted & MESSAGE;
688     my $has_level   = $wanted & LEVEL  ;
689
690     if ($has_level) {
691         if (@_ != ($has_message ? 3 : 2)) {
692             my $sub = (caller 1)[3];
693             my $syntax = $has_message
694                 ? "category, level, 'message'"
695                 : 'category, level';
696             Croaker("Usage: $sub($syntax)");
697         }
698     }
699     elsif (not @_ == 1 || @_ == ($has_message ? 2 : 0)) {
700         my $sub = (caller 1)[3];
701         my $syntax = $has_message ? "[category,] 'message'" : '[category]';
702         Croaker("Usage: $sub($syntax)");
703     }
704
705     my $message = pop if $has_message;
706
707     if (@_) {
708         # check the category supplied.
709         $category = shift ;
710         if (my $type = ref $category) {
711             Croaker("not an object")
712                 if exists $builtin_type{$type};
713             $category = $type;
714             $isobj = 1 ;
715         }
716         $offset = $Offsets{$category};
717         Croaker("Unknown warnings category '$category'")
718             unless defined $offset;
719     }
720     else {
721         $category = (caller(1))[0] ;
722         $offset = $Offsets{$category};
723         Croaker("package '$category' not registered for warnings")
724             unless defined $offset ;
725     }
726
727     my $i;
728
729     if ($isobj) {
730         my $pkg;
731         $i = 2;
732         while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
733             last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
734         }
735         $i -= 2 ;
736     }
737     elsif ($has_level) {
738         $i = 2 + shift;
739     }
740     else {
741         $i = _error_loc(); # see where Carp will allocate the error
742     }
743
744     # Default to 0 if caller returns nothing.  Default to $DEFAULT if it
745     # explicitly returns undef.
746     my(@callers_bitmask) = (caller($i))[9] ;
747     my $callers_bitmask =
748          @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
749     length($callers_bitmask) > ($offset >> 3) or $offset = $Offsets{all};
750
751     my @results;
752     foreach my $type (FATAL, NORMAL) {
753         next unless $wanted & $type;
754
755         push @results, vec($callers_bitmask, $offset + $type - 1, 1);
756     }
757
758     # &enabled and &fatal_enabled
759     return $results[0] unless $has_message;
760
761     # &warnif, and the category is neither enabled as warning nor as fatal
762     return if ($wanted & (NORMAL | FATAL | MESSAGE))
763                       == (NORMAL | FATAL | MESSAGE)
764         && !($results[0] || $results[1]);
765
766     # If we have an explicit level, bypass Carp.
767     if ($has_level and @callers_bitmask) {
768         # logic copied from util.c:mess_sv
769         my $stuff = " at " . join " line ", (caller $i)[1,2];
770         $stuff .= sprintf ", <%s> %s %d",
771                            *${^LAST_FH}{NAME},
772                            ($/ eq "\n" ? "line" : "chunk"), $.
773             if $. && ${^LAST_FH};
774         die "$message$stuff.\n" if $results[0];
775         return warn "$message$stuff.\n";
776     }
777
778     require Carp;
779     Carp::croak($message) if $results[0];
780     # will always get here for &warn. will only get here for &warnif if the
781     # category is enabled
782     Carp::carp($message);
783 }
784
785 sub _mkMask
786 {
787     my ($bit) = @_;
788     my $mask = "";
789
790     vec($mask, $bit, 1) = 1;
791     return $mask;
792 }
793
794 sub register_categories
795 {
796     my @names = @_;
797
798     for my $name (@names) {
799         if (! defined $Bits{$name}) {
800             $Offsets{$name}  = $LAST_BIT;
801             $Bits{$name}     = _mkMask($LAST_BIT++);
802             $DeadBits{$name} = _mkMask($LAST_BIT++);
803             if (length($Bits{$name}) > length($Bits{all})) {
804                 $Bits{all} .= "\x55";
805                 $DeadBits{all} .= "\xaa";
806             }
807         }
808     }
809 }
810
811 sub _error_loc {
812     require Carp;
813     goto &Carp::short_error_loc; # don't introduce another stack frame
814 }
815
816 sub enabled
817 {
818     return __chk(NORMAL, @_);
819 }
820
821 sub fatal_enabled
822 {
823     return __chk(FATAL, @_);
824 }
825
826 sub warn
827 {
828     return __chk(FATAL | MESSAGE, @_);
829 }
830
831 sub warnif
832 {
833     return __chk(NORMAL | FATAL | MESSAGE, @_);
834 }
835
836 sub enabled_at_level
837 {
838     return __chk(NORMAL | LEVEL, @_);
839 }
840
841 sub fatal_enabled_at_level
842 {
843     return __chk(FATAL | LEVEL, @_);
844 }
845
846 sub warn_at_level
847 {
848     return __chk(FATAL | MESSAGE | LEVEL, @_);
849 }
850
851 sub warnif_at_level
852 {
853     return __chk(NORMAL | FATAL | MESSAGE | LEVEL, @_);
854 }
855
856 # These are not part of any public interface, so we can delete them to save
857 # space.
858 delete @warnings::{qw(NORMAL FATAL MESSAGE LEVEL)};
859
860 1;
861 __END__
862
863 =head1 NAME
864
865 warnings - Perl pragma to control optional warnings
866
867 =head1 SYNOPSIS
868
869     use warnings;
870     no warnings;
871
872     use warnings "all";
873     no warnings "all";
874
875     use warnings::register;
876     if (warnings::enabled()) {
877         warnings::warn("some warning");
878     }
879
880     if (warnings::enabled("void")) {
881         warnings::warn("void", "some warning");
882     }
883
884     if (warnings::enabled($object)) {
885         warnings::warn($object, "some warning");
886     }
887
888     warnings::warnif("some warning");
889     warnings::warnif("void", "some warning");
890     warnings::warnif($object, "some warning");
891
892 =head1 DESCRIPTION
893
894 The C<warnings> pragma gives control over which warnings are enabled in
895 which parts of a Perl program.  It's a more flexible alternative for
896 both the command line flag B<-w> and the equivalent Perl variable,
897 C<$^W>.
898
899 This pragma works just like the C<strict> pragma.
900 This means that the scope of the warning pragma is limited to the
901 enclosing block.  It also means that the pragma setting will not
902 leak across files (via C<use>, C<require> or C<do>).  This allows
903 authors to independently define the degree of warning checks that will
904 be applied to their module.
905
906 By default, optional warnings are disabled, so any legacy code that
907 doesn't attempt to control the warnings will work unchanged.
908
909 All warnings are enabled in a block by either of these:
910
911     use warnings;
912     use warnings 'all';
913
914 Similarly all warnings are disabled in a block by either of these:
915
916     no warnings;
917     no warnings 'all';
918
919 For example, consider the code below:
920
921     use warnings;
922     my @a;
923     {
924         no warnings;
925         my $b = @a[0];
926     }
927     my $c = @a[0];
928
929 The code in the enclosing block has warnings enabled, but the inner
930 block has them disabled.  In this case that means the assignment to the
931 scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
932 warning, but the assignment to the scalar C<$b> will not.
933
934 =head2 Default Warnings and Optional Warnings
935
936 Before the introduction of lexical warnings, Perl had two classes of
937 warnings: mandatory and optional.
938
939 As its name suggests, if your code tripped a mandatory warning, you
940 would get a warning whether you wanted it or not.
941 For example, the code below would always produce an C<"isn't numeric">
942 warning about the "2:".
943
944     my $a = "2:" + 3;
945
946 With the introduction of lexical warnings, mandatory warnings now become
947 I<default> warnings.  The difference is that although the previously
948 mandatory warnings are still enabled by default, they can then be
949 subsequently enabled or disabled with the lexical warning pragma.  For
950 example, in the code below, an C<"isn't numeric"> warning will only
951 be reported for the C<$a> variable.
952
953     my $a = "2:" + 3;
954     no warnings;
955     my $b = "2:" + 3;
956
957 Note that neither the B<-w> flag or the C<$^W> can be used to
958 disable/enable default warnings.  They are still mandatory in this case.
959
960 =head2 What's wrong with B<-w> and C<$^W>
961
962 Although very useful, the big problem with using B<-w> on the command
963 line to enable warnings is that it is all or nothing.  Take the typical
964 scenario when you are writing a Perl program.  Parts of the code you
965 will write yourself, but it's very likely that you will make use of
966 pre-written Perl modules.  If you use the B<-w> flag in this case, you
967 end up enabling warnings in pieces of code that you haven't written.
968
969 Similarly, using C<$^W> to either disable or enable blocks of code is
970 fundamentally flawed.  For a start, say you want to disable warnings in
971 a block of code.  You might expect this to be enough to do the trick:
972
973      {
974          local ($^W) = 0;
975          my $a =+ 2;
976          my $b; chop $b;
977      }
978
979 When this code is run with the B<-w> flag, a warning will be produced
980 for the C<$a> line:  C<"Reversed += operator">.
981
982 The problem is that Perl has both compile-time and run-time warnings.  To
983 disable compile-time warnings you need to rewrite the code like this:
984
985      {
986          BEGIN { $^W = 0 }
987          my $a =+ 2;
988          my $b; chop $b;
989      }
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 $b; chop $b;
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 you 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 $a = Original->new();
1368     $a->doit(1);
1369     my $b = Derived->new();
1370     $a->doit(1);
1371
1372 When this code is run only the C<Derived> object, C<$b>, 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