This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Deparse require vstring without parens
[perl5.git] / lib / warnings.pm
... / ...
CommitLineData
1# -*- buffer-read-only: t -*-
2# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
3# This file is built by regen/warnings.pl.
4# Any changes made here will be lost!
5
6package warnings;
7
8our $VERSION = '1.29';
9
10# Verify that we're called correctly so that warnings will work.
11# see also strict.pm.
12unless ( __FILE__ =~ /(^|[\/\\])\Q${\__PACKAGE__}\E\.pmc?$/ ) {
13 my (undef, $f, $l) = caller;
14 die("Incorrect use of pragma '${\__PACKAGE__}' at $f line $l.\n");
15}
16
17our %Offsets = (
18
19 # Warnings Categories added in Perl 5.008
20
21 'all' => 0,
22 'closure' => 2,
23 'deprecated' => 4,
24 'exiting' => 6,
25 'glob' => 8,
26 'io' => 10,
27 'closed' => 12,
28 'exec' => 14,
29 'layer' => 16,
30 'newline' => 18,
31 'pipe' => 20,
32 'unopened' => 22,
33 'misc' => 24,
34 'numeric' => 26,
35 'once' => 28,
36 'overflow' => 30,
37 'pack' => 32,
38 'portable' => 34,
39 'recursion' => 36,
40 'redefine' => 38,
41 'regexp' => 40,
42 'severe' => 42,
43 'debugging' => 44,
44 'inplace' => 46,
45 'internal' => 48,
46 'malloc' => 50,
47 'signal' => 52,
48 'substr' => 54,
49 'syntax' => 56,
50 'ambiguous' => 58,
51 'bareword' => 60,
52 'digit' => 62,
53 'parenthesis' => 64,
54 'precedence' => 66,
55 'printf' => 68,
56 'prototype' => 70,
57 'qw' => 72,
58 'reserved' => 74,
59 'semicolon' => 76,
60 'taint' => 78,
61 'threads' => 80,
62 'uninitialized' => 82,
63 'unpack' => 84,
64 'untie' => 86,
65 'utf8' => 88,
66 'void' => 90,
67
68 # Warnings Categories added in Perl 5.011
69
70 'imprecision' => 92,
71 'illegalproto' => 94,
72
73 # Warnings Categories added in Perl 5.013
74
75 'non_unicode' => 96,
76 'nonchar' => 98,
77 'surrogate' => 100,
78
79 # Warnings Categories added in Perl 5.017
80
81 'experimental' => 102,
82 'experimental::lexical_subs'=> 104,
83 'experimental::lexical_topic'=> 106,
84 'experimental::regex_sets'=> 108,
85 'experimental::smartmatch'=> 110,
86
87 # Warnings Categories added in Perl 5.019
88
89 'experimental::autoderef'=> 112,
90 'experimental::postderef'=> 114,
91 'experimental::signatures'=> 116,
92 'syscalls' => 118,
93
94 # Warnings Categories added in Perl 5.021
95
96 'experimental::refaliasing'=> 120,
97 'experimental::win32_perlio'=> 122,
98 'locale' => 124,
99 'missing' => 126,
100 'redundant' => 128,
101 );
102
103our %Bits = (
104 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x01", # [0..64]
105 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29]
106 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30]
107 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
108 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
109 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22]
110 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
111 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
112 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
113 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
114 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x15\x05\x00", # [51..58,60,61]
115 'experimental::autoderef'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [56]
116 'experimental::lexical_subs'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [52]
117 'experimental::lexical_topic'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [53]
118 'experimental::postderef'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [57]
119 'experimental::refaliasing'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [60]
120 'experimental::regex_sets'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [54]
121 'experimental::signatures'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [58]
122 'experimental::smartmatch'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [55]
123 'experimental::win32_perlio'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [61]
124 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
125 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [47]
126 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [46]
127 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23]
128 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24]
129 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [5..11,59]
130 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
131 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [62]
132 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25]
133 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
134 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [63]
135 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
136 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [48]
137 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [49]
138 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
139 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
140 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
141 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16]
142 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [32]
143 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
144 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17]
145 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [33]
146 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [34]
147 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [35]
148 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [36]
149 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18]
150 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19]
151 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [64]
152 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20]
153 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [37]
154 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [38]
155 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25]
156 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26]
157 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27]
158 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [50]
159 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x40\x00\x00\x00\x00\x00", # [28..38,47]
160 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [59]
161 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [39]
162 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [40]
163 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00", # [41]
164 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
165 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [42]
166 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [43]
167 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x15\x00\x00\x00\x00", # [44,48..50]
168 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [45]
169 );
170
171our %DeadBits = (
172 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x02", # [0..64]
173 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29]
174 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30]
175 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
176 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
177 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22]
178 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
179 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
180 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
181 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
182 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\x2a\x0a\x00", # [51..58,60,61]
183 'experimental::autoderef'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [56]
184 'experimental::lexical_subs'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [52]
185 'experimental::lexical_topic'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [53]
186 'experimental::postderef'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [57]
187 'experimental::refaliasing'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [60]
188 'experimental::regex_sets'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [54]
189 'experimental::signatures'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [58]
190 'experimental::smartmatch'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [55]
191 'experimental::win32_perlio'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [61]
192 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
193 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [47]
194 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [46]
195 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23]
196 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24]
197 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [5..11,59]
198 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
199 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [62]
200 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25]
201 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
202 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [63]
203 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
204 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [48]
205 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [49]
206 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
207 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
208 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
209 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16]
210 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [32]
211 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
212 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17]
213 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [33]
214 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [34]
215 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [35]
216 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [36]
217 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18]
218 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19]
219 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [64]
220 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20]
221 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [37]
222 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [38]
223 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25]
224 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26]
225 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27]
226 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [50]
227 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x80\x00\x00\x00\x00\x00", # [28..38,47]
228 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [59]
229 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [39]
230 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [40]
231 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00", # [41]
232 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
233 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [42]
234 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [43]
235 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x2a\x00\x00\x00\x00", # [44,48..50]
236 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [45]
237 );
238
239$NONE = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
240$DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x15\x15\x00", # [2,56,52,53,57,60,54,58,55,61,4,62,22,23,25]
241$LAST_BIT = 130 ;
242$BYTES = 17 ;
243
244$All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
245
246sub Croaker
247{
248 require Carp; # this initializes %CarpInternal
249 local $Carp::CarpInternal{'warnings'};
250 delete $Carp::CarpInternal{'warnings'};
251 Carp::croak(@_);
252}
253
254sub _bits {
255 my $mask = shift ;
256 my $catmask ;
257 my $fatal = 0 ;
258 my $no_fatal = 0 ;
259
260 foreach my $word ( @_ ) {
261 if ($word eq 'FATAL') {
262 $fatal = 1;
263 $no_fatal = 0;
264 }
265 elsif ($word eq 'NONFATAL') {
266 $fatal = 0;
267 $no_fatal = 1;
268 }
269 elsif ($catmask = $Bits{$word}) {
270 $mask |= $catmask ;
271 $mask |= $DeadBits{$word} if $fatal ;
272 $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
273 }
274 else
275 { Croaker("Unknown warnings category '$word'")}
276 }
277
278 return $mask ;
279}
280
281sub bits
282{
283 # called from B::Deparse.pm
284 push @_, 'all' unless @_ ;
285 return _bits(undef, @_) ;
286}
287
288sub import
289{
290 shift;
291
292 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
293
294 if (vec($mask, $Offsets{'all'}, 1)) {
295 $mask |= $Bits{'all'} ;
296 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
297 }
298
299 # append 'all' when implied (after a lone "FATAL" or "NONFATAL")
300 push @_, 'all' if @_==1 && ( $_[0] eq 'FATAL' || $_[0] eq 'NONFATAL' );
301
302 # Empty @_ is equivalent to @_ = 'all' ;
303 ${^WARNING_BITS} = @_ ? _bits($mask, @_) : $mask | $Bits{all} ;
304}
305
306sub unimport
307{
308 shift;
309
310 my $catmask ;
311 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
312
313 if (vec($mask, $Offsets{'all'}, 1)) {
314 $mask |= $Bits{'all'} ;
315 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
316 }
317
318 # append 'all' when implied (empty import list or after a lone "FATAL")
319 push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
320
321 foreach my $word ( @_ ) {
322 if ($word eq 'FATAL') {
323 next;
324 }
325 elsif ($catmask = $Bits{$word}) {
326 $mask &= ~($catmask | $DeadBits{$word} | $All);
327 }
328 else
329 { Croaker("Unknown warnings category '$word'")}
330 }
331
332 ${^WARNING_BITS} = $mask ;
333}
334
335my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
336
337sub MESSAGE () { 4 };
338sub FATAL () { 2 };
339sub NORMAL () { 1 };
340
341sub __chk
342{
343 my $category ;
344 my $offset ;
345 my $isobj = 0 ;
346 my $wanted = shift;
347 my $has_message = $wanted & MESSAGE;
348
349 unless (@_ == 1 || @_ == ($has_message ? 2 : 0)) {
350 my $sub = (caller 1)[3];
351 my $syntax = $has_message ? "[category,] 'message'" : '[category]';
352 Croaker("Usage: $sub($syntax)");
353 }
354
355 my $message = pop if $has_message;
356
357 if (@_) {
358 # check the category supplied.
359 $category = shift ;
360 if (my $type = ref $category) {
361 Croaker("not an object")
362 if exists $builtin_type{$type};
363 $category = $type;
364 $isobj = 1 ;
365 }
366 $offset = $Offsets{$category};
367 Croaker("Unknown warnings category '$category'")
368 unless defined $offset;
369 }
370 else {
371 $category = (caller(1))[0] ;
372 $offset = $Offsets{$category};
373 Croaker("package '$category' not registered for warnings")
374 unless defined $offset ;
375 }
376
377 my $i;
378
379 if ($isobj) {
380 my $pkg;
381 $i = 2;
382 while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
383 last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
384 }
385 $i -= 2 ;
386 }
387 else {
388 $i = _error_loc(); # see where Carp will allocate the error
389 }
390
391 # Default to 0 if caller returns nothing. Default to $DEFAULT if it
392 # explicitly returns undef.
393 my(@callers_bitmask) = (caller($i))[9] ;
394 my $callers_bitmask =
395 @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
396
397 my @results;
398 foreach my $type (FATAL, NORMAL) {
399 next unless $wanted & $type;
400
401 push @results, (vec($callers_bitmask, $offset + $type - 1, 1) ||
402 vec($callers_bitmask, $Offsets{'all'} + $type - 1, 1));
403 }
404
405 # &enabled and &fatal_enabled
406 return $results[0] unless $has_message;
407
408 # &warnif, and the category is neither enabled as warning nor as fatal
409 return if $wanted == (NORMAL | FATAL | MESSAGE)
410 && !($results[0] || $results[1]);
411
412 require Carp;
413 Carp::croak($message) if $results[0];
414 # will always get here for &warn. will only get here for &warnif if the
415 # category is enabled
416 Carp::carp($message);
417}
418
419sub _mkMask
420{
421 my ($bit) = @_;
422 my $mask = "";
423
424 vec($mask, $bit, 1) = 1;
425 return $mask;
426}
427
428sub register_categories
429{
430 my @names = @_;
431
432 for my $name (@names) {
433 if (! defined $Bits{$name}) {
434 $Bits{$name} = _mkMask($LAST_BIT);
435 vec($Bits{'all'}, $LAST_BIT, 1) = 1;
436 $Offsets{$name} = $LAST_BIT ++;
437 foreach my $k (keys %Bits) {
438 vec($Bits{$k}, $LAST_BIT, 1) = 0;
439 }
440 $DeadBits{$name} = _mkMask($LAST_BIT);
441 vec($DeadBits{'all'}, $LAST_BIT++, 1) = 1;
442 }
443 }
444}
445
446sub _error_loc {
447 require Carp;
448 goto &Carp::short_error_loc; # don't introduce another stack frame
449}
450
451sub enabled
452{
453 return __chk(NORMAL, @_);
454}
455
456sub fatal_enabled
457{
458 return __chk(FATAL, @_);
459}
460
461sub warn
462{
463 return __chk(FATAL | MESSAGE, @_);
464}
465
466sub warnif
467{
468 return __chk(NORMAL | FATAL | MESSAGE, @_);
469}
470
471# These are not part of any public interface, so we can delete them to save
472# space.
473delete @warnings::{qw(NORMAL FATAL MESSAGE)};
474
4751;
476__END__
477=head1 NAME
478
479warnings - Perl pragma to control optional warnings
480
481=head1 SYNOPSIS
482
483 use warnings;
484 no warnings;
485
486 use warnings "all";
487 no warnings "all";
488
489 use warnings::register;
490 if (warnings::enabled()) {
491 warnings::warn("some warning");
492 }
493
494 if (warnings::enabled("void")) {
495 warnings::warn("void", "some warning");
496 }
497
498 if (warnings::enabled($object)) {
499 warnings::warn($object, "some warning");
500 }
501
502 warnings::warnif("some warning");
503 warnings::warnif("void", "some warning");
504 warnings::warnif($object, "some warning");
505
506=head1 DESCRIPTION
507
508The C<warnings> pragma gives control over which warnings are enabled in
509which parts of a Perl program. It's a more flexible alternative for
510both the command line flag B<-w> and the equivalent Perl variable,
511C<$^W>.
512
513This pragma works just like the C<strict> pragma.
514This means that the scope of the warning pragma is limited to the
515enclosing block. It also means that the pragma setting will not
516leak across files (via C<use>, C<require> or C<do>). This allows
517authors to independently define the degree of warning checks that will
518be applied to their module.
519
520By default, optional warnings are disabled, so any legacy code that
521doesn't attempt to control the warnings will work unchanged.
522
523All warnings are enabled in a block by either of these:
524
525 use warnings;
526 use warnings 'all';
527
528Similarly all warnings are disabled in a block by either of these:
529
530 no warnings;
531 no warnings 'all';
532
533For example, consider the code below:
534
535 use warnings;
536 my @a;
537 {
538 no warnings;
539 my $b = @a[0];
540 }
541 my $c = @a[0];
542
543The code in the enclosing block has warnings enabled, but the inner
544block has them disabled. In this case that means the assignment to the
545scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
546warning, but the assignment to the scalar C<$b> will not.
547
548=head2 Default Warnings and Optional Warnings
549
550Before the introduction of lexical warnings, Perl had two classes of
551warnings: mandatory and optional.
552
553As its name suggests, if your code tripped a mandatory warning, you
554would get a warning whether you wanted it or not.
555For example, the code below would always produce an C<"isn't numeric">
556warning about the "2:".
557
558 my $a = "2:" + 3;
559
560With the introduction of lexical warnings, mandatory warnings now become
561I<default> warnings. The difference is that although the previously
562mandatory warnings are still enabled by default, they can then be
563subsequently enabled or disabled with the lexical warning pragma. For
564example, in the code below, an C<"isn't numeric"> warning will only
565be reported for the C<$a> variable.
566
567 my $a = "2:" + 3;
568 no warnings;
569 my $b = "2:" + 3;
570
571Note that neither the B<-w> flag or the C<$^W> can be used to
572disable/enable default warnings. They are still mandatory in this case.
573
574=head2 What's wrong with B<-w> and C<$^W>
575
576Although very useful, the big problem with using B<-w> on the command
577line to enable warnings is that it is all or nothing. Take the typical
578scenario when you are writing a Perl program. Parts of the code you
579will write yourself, but it's very likely that you will make use of
580pre-written Perl modules. If you use the B<-w> flag in this case, you
581end up enabling warnings in pieces of code that you haven't written.
582
583Similarly, using C<$^W> to either disable or enable blocks of code is
584fundamentally flawed. For a start, say you want to disable warnings in
585a block of code. You might expect this to be enough to do the trick:
586
587 {
588 local ($^W) = 0;
589 my $a =+ 2;
590 my $b; chop $b;
591 }
592
593When this code is run with the B<-w> flag, a warning will be produced
594for the C<$a> line: C<"Reversed += operator">.
595
596The problem is that Perl has both compile-time and run-time warnings. To
597disable compile-time warnings you need to rewrite the code like this:
598
599 {
600 BEGIN { $^W = 0 }
601 my $a =+ 2;
602 my $b; chop $b;
603 }
604
605The other big problem with C<$^W> is the way you can inadvertently
606change the warning setting in unexpected places in your code. For example,
607when the code below is run (without the B<-w> flag), the second call
608to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas
609the first will not.
610
611 sub doit
612 {
613 my $b; chop $b;
614 }
615
616 doit();
617
618 {
619 local ($^W) = 1;
620 doit()
621 }
622
623This is a side-effect of C<$^W> being dynamically scoped.
624
625Lexical warnings get around these limitations by allowing finer control
626over where warnings can or can't be tripped.
627
628=head2 Controlling Warnings from the Command Line
629
630There are three Command Line flags that can be used to control when
631warnings are (or aren't) produced:
632
633=over 5
634
635=item B<-w>
636X<-w>
637
638This is the existing flag. If the lexical warnings pragma is B<not>
639used in any of you code, or any of the modules that you use, this flag
640will enable warnings everywhere. See L<Backward Compatibility> for
641details of how this flag interacts with lexical warnings.
642
643=item B<-W>
644X<-W>
645
646If the B<-W> flag is used on the command line, it will enable all warnings
647throughout the program regardless of whether warnings were disabled
648locally using C<no warnings> or C<$^W =0>.
649This includes all files that get
650included via C<use>, C<require> or C<do>.
651Think of it as the Perl equivalent of the "lint" command.
652
653=item B<-X>
654X<-X>
655
656Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
657
658=back
659
660=head2 Backward Compatibility
661
662If you are used to working with a version of Perl prior to the
663introduction of lexically scoped warnings, or have code that uses both
664lexical warnings and C<$^W>, this section will describe how they interact.
665
666How Lexical Warnings interact with B<-w>/C<$^W>:
667
668=over 5
669
670=item 1.
671
672If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
673control warnings is used and neither C<$^W> nor the C<warnings> pragma
674are used, then default warnings will be enabled and optional warnings
675disabled.
676This means that legacy code that doesn't attempt to control the warnings
677will work unchanged.
678
679=item 2.
680
681The B<-w> flag just sets the global C<$^W> variable as in 5.005. This
682means that any legacy code that currently relies on manipulating C<$^W>
683to control warning behavior will still work as is.
684
685=item 3.
686
687Apart from now being a boolean, the C<$^W> variable operates in exactly
688the same horrible uncontrolled global way, except that it cannot
689disable/enable default warnings.
690
691=item 4.
692
693If a piece of code is under the control of the C<warnings> pragma,
694both the C<$^W> variable and the B<-w> flag will be ignored for the
695scope of the lexical warning.
696
697=item 5.
698
699The only way to override a lexical warnings setting is with the B<-W>
700or B<-X> command line flags.
701
702=back
703
704The combined effect of 3 & 4 is that it will allow code which uses
705the C<warnings> pragma to control the warning behavior of $^W-type
706code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
707
708=head2 Category Hierarchy
709X<warning, categories>
710
711A hierarchy of "categories" have been defined to allow groups of warnings
712to be enabled/disabled in isolation.
713
714The current hierarchy is:
715
716 all -+
717 |
718 +- closure
719 |
720 +- deprecated
721 |
722 +- exiting
723 |
724 +- experimental --+
725 | |
726 | +- experimental::autoderef
727 | |
728 | +- experimental::lexical_subs
729 | |
730 | +- experimental::lexical_topic
731 | |
732 | +- experimental::postderef
733 | |
734 | +- experimental::refaliasing
735 | |
736 | +- experimental::regex_sets
737 | |
738 | +- experimental::signatures
739 | |
740 | +- experimental::smartmatch
741 | |
742 | +- experimental::win32_perlio
743 |
744 +- glob
745 |
746 +- imprecision
747 |
748 +- io ------------+
749 | |
750 | +- closed
751 | |
752 | +- exec
753 | |
754 | +- layer
755 | |
756 | +- newline
757 | |
758 | +- pipe
759 | |
760 | +- syscalls
761 | |
762 | +- unopened
763 |
764 +- locale
765 |
766 +- misc
767 |
768 +- missing
769 |
770 +- numeric
771 |
772 +- once
773 |
774 +- overflow
775 |
776 +- pack
777 |
778 +- portable
779 |
780 +- recursion
781 |
782 +- redefine
783 |
784 +- redundant
785 |
786 +- regexp
787 |
788 +- severe --------+
789 | |
790 | +- debugging
791 | |
792 | +- inplace
793 | |
794 | +- internal
795 | |
796 | +- malloc
797 |
798 +- signal
799 |
800 +- substr
801 |
802 +- syntax --------+
803 | |
804 | +- ambiguous
805 | |
806 | +- bareword
807 | |
808 | +- digit
809 | |
810 | +- illegalproto
811 | |
812 | +- parenthesis
813 | |
814 | +- precedence
815 | |
816 | +- printf
817 | |
818 | +- prototype
819 | |
820 | +- qw
821 | |
822 | +- reserved
823 | |
824 | +- semicolon
825 |
826 +- taint
827 |
828 +- threads
829 |
830 +- uninitialized
831 |
832 +- unpack
833 |
834 +- untie
835 |
836 +- utf8 ----------+
837 | |
838 | +- non_unicode
839 | |
840 | +- nonchar
841 | |
842 | +- surrogate
843 |
844 +- void
845
846Just like the "strict" pragma any of these categories can be combined
847
848 use warnings qw(void redefine);
849 no warnings qw(io syntax untie);
850
851Also like the "strict" pragma, if there is more than one instance of the
852C<warnings> pragma in a given scope the cumulative effect is additive.
853
854 use warnings qw(void); # only "void" warnings enabled
855 ...
856 use warnings qw(io); # only "void" & "io" warnings enabled
857 ...
858 no warnings qw(void); # only "io" warnings enabled
859
860To determine which category a specific warning has been assigned to see
861L<perldiag>.
862
863Note: Before Perl 5.8.0, the lexical warnings category "deprecated" was a
864sub-category of the "syntax" category. It is now a top-level category
865in its own right.
866
867Note: Before 5.21.0, the "missing" lexical warnings category was
868internally defined to be the same as the "uninitialized" category. It
869is now a top-level category in its own right.
870
871=head2 Fatal Warnings
872X<warning, fatal>
873
874The presence of the word "FATAL" in the category list will escalate any
875warnings detected from the categories specified in the lexical scope
876into fatal errors. In the code below, the use of C<time>, C<length>
877and C<join> can all produce a C<"Useless use of xxx in void context">
878warning.
879
880 use warnings;
881
882 time;
883
884 {
885 use warnings FATAL => qw(void);
886 length "abc";
887 }
888
889 join "", 1,2,3;
890
891 print "done\n";
892
893When run it produces this output
894
895 Useless use of time in void context at fatal line 3.
896 Useless use of length in void context at fatal line 7.
897
898The scope where C<length> is used has escalated the C<void> warnings
899category into a fatal error, so the program terminates immediately when it
900encounters the warning.
901
902To explicitly turn off a "FATAL" warning you just disable the warning
903it is associated with. So, for example, to disable the "void" warning
904in the example above, either of these will do the trick:
905
906 no warnings qw(void);
907 no warnings FATAL => qw(void);
908
909If you want to downgrade a warning that has been escalated into a fatal
910error back to a normal warning, you can use the "NONFATAL" keyword. For
911example, the code below will promote all warnings into fatal errors,
912except for those in the "syntax" category.
913
914 use warnings FATAL => 'all', NONFATAL => 'syntax';
915
916As of Perl 5.20, instead of C<< use warnings FATAL => 'all'; >> you can
917use:
918
919 use v5.20; # Perl 5.20 or greater is required for the following
920 use warnings 'FATAL'; # short form of "use warnings FATAL => 'all';"
921
922If you want your program to be compatible with versions of Perl before
9235.20, you must use C<< use warnings FATAL => 'all'; >> instead. (In
924previous versions of Perl, the behavior of the statements
925C<< use warnings 'FATAL'; >>, C<< use warnings 'NONFATAL'; >> and
926C<< no warnings 'FATAL'; >> was unspecified; they did not behave as if
927they included the C<< => 'all' >> portion. As of 5.20, they do.)
928
929B<NOTE:> Users of FATAL warnings, especially
930those using C<< FATAL => 'all' >>
931should be fully aware that they are risking future portability of their
932programs by doing so. Perl makes absolutely no commitments to not
933introduce new warnings, or warnings categories in the future, and indeed
934we explicitly reserve the right to do so. Code that may not warn now may
935warn in a future release of Perl if the Perl5 development team deems it
936in the best interests of the community to do so. Should code using FATAL
937warnings break due to the introduction of a new warning we will NOT
938consider it an incompatible change. Users of FATAL warnings should take
939special caution during upgrades to check to see if their code triggers
940any new warnings and should pay particular attention to the fine print of
941the documentation of the features they use to ensure they do not exploit
942features that are documented as risky, deprecated, or unspecified, or where
943the documentation says "so don't do that", or anything with the same sense
944and spirit. Use of such features in combination with FATAL warnings is
945ENTIRELY AT THE USER'S RISK.
946
947=head2 Reporting Warnings from a Module
948X<warning, reporting> X<warning, registering>
949
950The C<warnings> pragma provides a number of functions that are useful for
951module authors. These are used when you want to report a module-specific
952warning to a calling module has enabled warnings via the C<warnings>
953pragma.
954
955Consider the module C<MyMod::Abc> below.
956
957 package MyMod::Abc;
958
959 use warnings::register;
960
961 sub open {
962 my $path = shift;
963 if ($path !~ m#^/#) {
964 warnings::warn("changing relative path to /var/abc")
965 if warnings::enabled();
966 $path = "/var/abc/$path";
967 }
968 }
969
970 1;
971
972The call to C<warnings::register> will create a new warnings category
973called "MyMod::Abc", i.e. the new category name matches the current
974package name. The C<open> function in the module will display a warning
975message if it gets given a relative path as a parameter. This warnings
976will only be displayed if the code that uses C<MyMod::Abc> has actually
977enabled them with the C<warnings> pragma like below.
978
979 use MyMod::Abc;
980 use warnings 'MyMod::Abc';
981 ...
982 abc::open("../fred.txt");
983
984It is also possible to test whether the pre-defined warnings categories are
985set in the calling module with the C<warnings::enabled> function. Consider
986this snippet of code:
987
988 package MyMod::Abc;
989
990 sub open {
991 warnings::warnif("deprecated",
992 "open is deprecated, use new instead");
993 new(@_);
994 }
995
996 sub new
997 ...
998 1;
999
1000The function C<open> has been deprecated, so code has been included to
1001display a warning message whenever the calling module has (at least) the
1002"deprecated" warnings category enabled. Something like this, say.
1003
1004 use warnings 'deprecated';
1005 use MyMod::Abc;
1006 ...
1007 MyMod::Abc::open($filename);
1008
1009Either the C<warnings::warn> or C<warnings::warnif> function should be
1010used to actually display the warnings message. This is because they can
1011make use of the feature that allows warnings to be escalated into fatal
1012errors. So in this case
1013
1014 use MyMod::Abc;
1015 use warnings FATAL => 'MyMod::Abc';
1016 ...
1017 MyMod::Abc::open('../fred.txt');
1018
1019the C<warnings::warnif> function will detect this and die after
1020displaying the warning message.
1021
1022The three warnings functions, C<warnings::warn>, C<warnings::warnif>
1023and C<warnings::enabled> can optionally take an object reference in place
1024of a category name. In this case the functions will use the class name
1025of the object as the warnings category.
1026
1027Consider this example:
1028
1029 package Original;
1030
1031 no warnings;
1032 use warnings::register;
1033
1034 sub new
1035 {
1036 my $class = shift;
1037 bless [], $class;
1038 }
1039
1040 sub check
1041 {
1042 my $self = shift;
1043 my $value = shift;
1044
1045 if ($value % 2 && warnings::enabled($self))
1046 { warnings::warn($self, "Odd numbers are unsafe") }
1047 }
1048
1049 sub doit
1050 {
1051 my $self = shift;
1052 my $value = shift;
1053 $self->check($value);
1054 # ...
1055 }
1056
1057 1;
1058
1059 package Derived;
1060
1061 use warnings::register;
1062 use Original;
1063 our @ISA = qw( Original );
1064 sub new
1065 {
1066 my $class = shift;
1067 bless [], $class;
1068 }
1069
1070
1071 1;
1072
1073The code below makes use of both modules, but it only enables warnings from
1074C<Derived>.
1075
1076 use Original;
1077 use Derived;
1078 use warnings 'Derived';
1079 my $a = Original->new();
1080 $a->doit(1);
1081 my $b = Derived->new();
1082 $a->doit(1);
1083
1084When this code is run only the C<Derived> object, C<$b>, will generate
1085a warning.
1086
1087 Odd numbers are unsafe at main.pl line 7
1088
1089Notice also that the warning is reported at the line where the object is first
1090used.
1091
1092When registering new categories of warning, you can supply more names to
1093warnings::register like this:
1094
1095 package MyModule;
1096 use warnings::register qw(format precision);
1097
1098 ...
1099
1100 warnings::warnif('MyModule::format', '...');
1101
1102=head1 FUNCTIONS
1103
1104=over 4
1105
1106=item use warnings::register
1107
1108Creates a new warnings category with the same name as the package where
1109the call to the pragma is used.
1110
1111=item warnings::enabled()
1112
1113Use the warnings category with the same name as the current package.
1114
1115Return TRUE if that warnings category is enabled in the calling module.
1116Otherwise returns FALSE.
1117
1118=item warnings::enabled($category)
1119
1120Return TRUE if the warnings category, C<$category>, is enabled in the
1121calling module.
1122Otherwise returns FALSE.
1123
1124=item warnings::enabled($object)
1125
1126Use the name of the class for the object reference, C<$object>, as the
1127warnings category.
1128
1129Return TRUE if that warnings category is enabled in the first scope
1130where the object is used.
1131Otherwise returns FALSE.
1132
1133=item warnings::fatal_enabled()
1134
1135Return TRUE if the warnings category with the same name as the current
1136package has been set to FATAL in the calling module.
1137Otherwise returns FALSE.
1138
1139=item warnings::fatal_enabled($category)
1140
1141Return TRUE if the warnings category C<$category> has been set to FATAL in
1142the calling module.
1143Otherwise returns FALSE.
1144
1145=item warnings::fatal_enabled($object)
1146
1147Use the name of the class for the object reference, C<$object>, as the
1148warnings category.
1149
1150Return TRUE if that warnings category has been set to FATAL in the first
1151scope where the object is used.
1152Otherwise returns FALSE.
1153
1154=item warnings::warn($message)
1155
1156Print C<$message> to STDERR.
1157
1158Use the warnings category with the same name as the current package.
1159
1160If that warnings category has been set to "FATAL" in the calling module
1161then die. Otherwise return.
1162
1163=item warnings::warn($category, $message)
1164
1165Print C<$message> to STDERR.
1166
1167If the warnings category, C<$category>, has been set to "FATAL" in the
1168calling module then die. Otherwise return.
1169
1170=item warnings::warn($object, $message)
1171
1172Print C<$message> to STDERR.
1173
1174Use the name of the class for the object reference, C<$object>, as the
1175warnings category.
1176
1177If that warnings category has been set to "FATAL" in the scope where C<$object>
1178is first used then die. Otherwise return.
1179
1180
1181=item warnings::warnif($message)
1182
1183Equivalent to:
1184
1185 if (warnings::enabled())
1186 { warnings::warn($message) }
1187
1188=item warnings::warnif($category, $message)
1189
1190Equivalent to:
1191
1192 if (warnings::enabled($category))
1193 { warnings::warn($category, $message) }
1194
1195=item warnings::warnif($object, $message)
1196
1197Equivalent to:
1198
1199 if (warnings::enabled($object))
1200 { warnings::warn($object, $message) }
1201
1202=item warnings::register_categories(@names)
1203
1204This registers warning categories for the given names and is primarily for
1205use by the warnings::register pragma.
1206
1207=back
1208
1209See also L<perlmodlib/Pragmatic Modules> and L<perldiag>.
1210
1211=cut
1212
1213# ex: set ro: