This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add a new perldelta
[perl5.git] / pod / perllexwarn.pod
CommitLineData
0453d815 1=head1 NAME
d74e8afc 2X<warning, lexical> X<warnings> X<warning>
0453d815
PM
3
4perllexwarn - Perl Lexical Warnings
5
6=head1 DESCRIPTION
5a3e7812 7
00eb3f2b
RGS
8The C<use warnings> pragma enables to control precisely what warnings are
9to be enabled in which parts of a Perl program. It's a more flexible
10alternative for both the command line flag B<-w> and the equivalent Perl
11variable, C<$^W>.
0453d815 12
00eb3f2b 13This pragma works just like the C<strict> pragma.
0453d815 14This means that the scope of the warning pragma is limited to the
106325ad 15enclosing block. It also means that the pragma setting will not
0453d815
PM
16leak across files (via C<use>, C<require> or C<do>). This allows
17authors to independently define the degree of warning checks that will
18be applied to their module.
19
20By default, optional warnings are disabled, so any legacy code that
21doesn't attempt to control the warnings will work unchanged.
22
23All warnings are enabled in a block by either of these:
c47ff5f1 24
4358a253
SS
25 use warnings;
26 use warnings 'all';
c47ff5f1 27
0453d815
PM
28Similarly all warnings are disabled in a block by either of these:
29
4358a253
SS
30 no warnings;
31 no warnings 'all';
0453d815
PM
32
33For example, consider the code below:
34
4358a253
SS
35 use warnings;
36 my @a;
0453d815 37 {
4358a253
SS
38 no warnings;
39 my $b = @a[0];
0453d815 40 }
f1f33818 41 my $c = @a[0];
0453d815
PM
42
43The code in the enclosing block has warnings enabled, but the inner
f1f33818
PM
44block has them disabled. In this case that means the assignment to the
45scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
46warning, but the assignment to the scalar C<$b> will not.
0453d815
PM
47
48=head2 Default Warnings and Optional Warnings
49
50Before the introduction of lexical warnings, Perl had two classes of
51warnings: mandatory and optional.
52
53As its name suggests, if your code tripped a mandatory warning, you
54would get a warning whether you wanted it or not.
252aa082
JH
55For example, the code below would always produce an C<"isn't numeric">
56warning about the "2:".
0453d815 57
252aa082 58 my $a = "2:" + 3;
0453d815 59
0453d815
PM
60With the introduction of lexical warnings, mandatory warnings now become
61I<default> warnings. The difference is that although the previously
62mandatory warnings are still enabled by default, they can then be
63subsequently enabled or disabled with the lexical warning pragma. For
e476b1b5 64example, in the code below, an C<"isn't numeric"> warning will only
0453d815
PM
65be reported for the C<$a> variable.
66
252aa082 67 my $a = "2:" + 3;
4358a253 68 no warnings;
252aa082 69 my $b = "2:" + 3;
0453d815
PM
70
71Note that neither the B<-w> flag or the C<$^W> can be used to
72disable/enable default warnings. They are still mandatory in this case.
73
74=head2 What's wrong with B<-w> and C<$^W>
75
76Although very useful, the big problem with using B<-w> on the command
77line to enable warnings is that it is all or nothing. Take the typical
78scenario when you are writing a Perl program. Parts of the code you
79will write yourself, but it's very likely that you will make use of
80pre-written Perl modules. If you use the B<-w> flag in this case, you
81end up enabling warnings in pieces of code that you haven't written.
82
83Similarly, using C<$^W> to either disable or enable blocks of code is
84fundamentally flawed. For a start, say you want to disable warnings in
85a block of code. You might expect this to be enough to do the trick:
86
87 {
4358a253
SS
88 local ($^W) = 0;
89 my $a =+ 2;
90 my $b; chop $b;
0453d815
PM
91 }
92
93When this code is run with the B<-w> flag, a warning will be produced
ac036724 94for the C<$a> line: C<"Reversed += operator">.
0453d815
PM
95
96The problem is that Perl has both compile-time and run-time warnings. To
97disable compile-time warnings you need to rewrite the code like this:
98
99 {
100 BEGIN { $^W = 0 }
4358a253
SS
101 my $a =+ 2;
102 my $b; chop $b;
0453d815
PM
103 }
104
f1f33818 105The other big problem with C<$^W> is the way you can inadvertently
0453d815
PM
106change the warning setting in unexpected places in your code. For example,
107when the code below is run (without the B<-w> flag), the second call
108to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas
109the first will not.
110
111 sub doit
112 {
4358a253 113 my $b; chop $b;
0453d815
PM
114 }
115
4358a253 116 doit();
0453d815
PM
117
118 {
4358a253 119 local ($^W) = 1;
0453d815
PM
120 doit()
121 }
122
123This is a side-effect of C<$^W> being dynamically scoped.
124
125Lexical warnings get around these limitations by allowing finer control
126over where warnings can or can't be tripped.
127
128=head2 Controlling Warnings from the Command Line
129
130There are three Command Line flags that can be used to control when
131warnings are (or aren't) produced:
132
133=over 5
134
135=item B<-w>
d74e8afc 136X<-w>
0453d815
PM
137
138This is the existing flag. If the lexical warnings pragma is B<not>
139used in any of you code, or any of the modules that you use, this flag
140will enable warnings everywhere. See L<Backward Compatibility> for
141details of how this flag interacts with lexical warnings.
142
143=item B<-W>
d74e8afc 144X<-W>
c47ff5f1 145
0453d815
PM
146If the B<-W> flag is used on the command line, it will enable all warnings
147throughout the program regardless of whether warnings were disabled
4438c4b7 148locally using C<no warnings> or C<$^W =0>. This includes all files that get
0453d815
PM
149included via C<use>, C<require> or C<do>.
150Think of it as the Perl equivalent of the "lint" command.
151
152=item B<-X>
d74e8afc 153X<-X>
0453d815
PM
154
155Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
156
157=back
158
159=head2 Backward Compatibility
160
1dc2b704 161If you are used to working with a version of Perl prior to the
0453d815
PM
162introduction of lexically scoped warnings, or have code that uses both
163lexical warnings and C<$^W>, this section will describe how they interact.
164
165How Lexical Warnings interact with B<-w>/C<$^W>:
5a3e7812 166
0453d815
PM
167=over 5
168
169=item 1.
170
171If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
1dc2b704 172control warnings is used and neither C<$^W> nor the C<warnings> pragma
e476b1b5
GS
173are used, then default warnings will be enabled and optional warnings
174disabled.
0453d815
PM
175This means that legacy code that doesn't attempt to control the warnings
176will work unchanged.
177
178=item 2.
179
ac036724 180The B<-w> flag just sets the global C<$^W> variable as in 5.005. This
0453d815
PM
181means that any legacy code that currently relies on manipulating C<$^W>
182to control warning behavior will still work as is.
183
184=item 3.
c47ff5f1 185
0453d815
PM
186Apart from now being a boolean, the C<$^W> variable operates in exactly
187the same horrible uncontrolled global way, except that it cannot
188disable/enable default warnings.
189
190=item 4.
c47ff5f1 191
e476b1b5 192If a piece of code is under the control of the C<warnings> pragma,
0453d815
PM
193both the C<$^W> variable and the B<-w> flag will be ignored for the
194scope of the lexical warning.
195
196=item 5.
c47ff5f1 197
0453d815
PM
198The only way to override a lexical warnings setting is with the B<-W>
199or B<-X> command line flags.
200
201=back
202
106325ad 203The combined effect of 3 & 4 is that it will allow code which uses
e476b1b5 204the C<warnings> pragma to control the warning behavior of $^W-type
0453d815
PM
205code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
206
0453d815 207=head2 Category Hierarchy
d74e8afc 208X<warning, categories>
c47ff5f1 209
e476b1b5
GS
210A hierarchy of "categories" have been defined to allow groups of warnings
211to be enabled/disabled in isolation.
212
213The current hierarchy is:
214
6f87cb12
FC
215 all -+
216 |
217 +- closure
218 |
219 +- deprecated
220 |
221 +- exiting
222 |
223 +- experimental
224 |
225 +- glob
226 |
227 +- imprecision
228 |
229 +- io ------------+
230 | |
231 | +- closed
232 | |
233 | +- exec
234 | |
235 | +- layer
236 | |
237 | +- newline
238 | |
239 | +- pipe
240 | |
241 | +- unopened
242 |
243 +- misc
244 |
245 +- numeric
246 |
247 +- once
248 |
249 +- overflow
250 |
251 +- pack
252 |
253 +- portable
254 |
255 +- recursion
256 |
257 +- redefine
258 |
259 +- regexp
260 |
261 +- severe --------+
262 | |
263 | +- debugging
264 | |
265 | +- inplace
266 | |
267 | +- internal
268 | |
269 | +- malloc
270 |
271 +- signal
272 |
273 +- substr
274 |
275 +- syntax --------+
276 | |
277 | +- ambiguous
278 | |
279 | +- bareword
280 | |
281 | +- digit
282 | |
283 | +- illegalproto
284 | |
285 | +- parenthesis
286 | |
287 | +- precedence
288 | |
289 | +- printf
290 | |
291 | +- prototype
292 | |
293 | +- qw
294 | |
295 | +- reserved
296 | |
297 | +- semicolon
298 |
299 +- taint
300 |
301 +- threads
302 |
303 +- uninitialized
304 |
305 +- unpack
306 |
307 +- untie
308 |
309 +- utf8 ----------+
310 | |
311 | +- non_unicode
312 | |
313 | +- nonchar
314 | |
315 | +- surrogate
316 |
317 +- void
0453d815 318
4438c4b7
JH
319Just like the "strict" pragma any of these categories can be combined
320
4358a253
SS
321 use warnings qw(void redefine);
322 no warnings qw(io syntax untie);
4438c4b7
JH
323
324Also like the "strict" pragma, if there is more than one instance of the
e476b1b5 325C<warnings> pragma in a given scope the cumulative effect is additive.
4438c4b7 326
4358a253 327 use warnings qw(void); # only "void" warnings enabled
4438c4b7 328 ...
4358a253 329 use warnings qw(io); # only "void" & "io" warnings enabled
4438c4b7 330 ...
4358a253 331 no warnings qw(void); # only "io" warnings enabled
4438c4b7 332
e476b1b5
GS
333To determine which category a specific warning has been assigned to see
334L<perldiag>.
0453d815 335
12bcd1a6
PM
336Note: In Perl 5.6.1, the lexical warnings category "deprecated" was a
337sub-category of the "syntax" category. It is now a top-level category
338in its own right.
339
6f87cb12
FC
340=head2 Individual Warning IDs
341
342The "experimental" warnings category, added in Perl 5.18,
343contains IDs for individual warnings, so that each warning can
344be turned on or off. Currently there is only one such warning,
345labelled "experimental:lexical_subs". You enable and disable
346it like this:
347
348 use warnings "experimental:lexical_subs";
349 no warnings "experimental:lexical_subs";
350
351The plan is to extend this convention to all warnings in a future release.
12bcd1a6 352
0453d815 353=head2 Fatal Warnings
d74e8afc 354X<warning, fatal>
c47ff5f1 355
0453d815 356The presence of the word "FATAL" in the category list will escalate any
e476b1b5 357warnings detected from the categories specified in the lexical scope
f1f33818
PM
358into fatal errors. In the code below, the use of C<time>, C<length>
359and C<join> can all produce a C<"Useless use of xxx in void context">
360warning.
4438c4b7 361
4358a253 362 use warnings;
cea6626f 363
4358a253 364 time;
cea6626f 365
0453d815 366 {
4358a253
SS
367 use warnings FATAL => qw(void);
368 length "abc";
0453d815 369 }
cea6626f 370
4358a253 371 join "", 1,2,3;
cea6626f 372
4358a253 373 print "done\n";
f1f33818
PM
374
375When run it produces this output
376
377 Useless use of time in void context at fatal line 3.
378 Useless use of length in void context at fatal line 7.
379
380The scope where C<length> is used has escalated the C<void> warnings
381category into a fatal error, so the program terminates immediately it
382encounters the warning.
c47ff5f1 383
6e9af7e4
PM
384To explicitly turn off a "FATAL" warning you just disable the warning
385it is associated with. So, for example, to disable the "void" warning
386in the example above, either of these will do the trick:
08540116
PM
387
388 no warnings qw(void);
389 no warnings FATAL => qw(void);
0453d815 390
6e9af7e4
PM
391If you want to downgrade a warning that has been escalated into a fatal
392error back to a normal warning, you can use the "NONFATAL" keyword. For
393example, the code below will promote all warnings into fatal errors,
394except for those in the "syntax" category.
395
396 use warnings FATAL => 'all', NONFATAL => 'syntax';
397
e476b1b5 398=head2 Reporting Warnings from a Module
d74e8afc 399X<warning, reporting> X<warning, registering>
e476b1b5 400
d3a7d8c7
GS
401The C<warnings> pragma provides a number of functions that are useful for
402module authors. These are used when you want to report a module-specific
7e6d00f8 403warning to a calling module has enabled warnings via the C<warnings>
d3a7d8c7 404pragma.
e476b1b5 405
d3a7d8c7 406Consider the module C<MyMod::Abc> below.
e476b1b5 407
d3a7d8c7 408 package MyMod::Abc;
e476b1b5 409
d3a7d8c7
GS
410 use warnings::register;
411
412 sub open {
4358a253 413 my $path = shift;
7ddf7bb5 414 if ($path !~ m#^/#) {
2359510d 415 warnings::warn("changing relative path to /var/abc")
7ddf7bb5 416 if warnings::enabled();
2359510d 417 $path = "/var/abc/$path";
d3a7d8c7
GS
418 }
419 }
420
4358a253 421 1;
d3a7d8c7
GS
422
423The call to C<warnings::register> will create a new warnings category
c901ad27 424called "MyMod::Abc", i.e. the new category name matches the current
7e6d00f8
PM
425package name. The C<open> function in the module will display a warning
426message if it gets given a relative path as a parameter. This warnings
427will only be displayed if the code that uses C<MyMod::Abc> has actually
428enabled them with the C<warnings> pragma like below.
d3a7d8c7
GS
429
430 use MyMod::Abc;
431 use warnings 'MyMod::Abc';
432 ...
433 abc::open("../fred.txt");
434
435It is also possible to test whether the pre-defined warnings categories are
436set in the calling module with the C<warnings::enabled> function. Consider
437this snippet of code:
438
439 package MyMod::Abc;
440
441 sub open {
7e6d00f8 442 warnings::warnif("deprecated",
4358a253
SS
443 "open is deprecated, use new instead");
444 new(@_);
e476b1b5 445 }
6bc102ca 446
e476b1b5
GS
447 sub new
448 ...
4358a253 449 1;
e476b1b5
GS
450
451The function C<open> has been deprecated, so code has been included to
452display a warning message whenever the calling module has (at least) the
453"deprecated" warnings category enabled. Something like this, say.
454
455 use warnings 'deprecated';
d3a7d8c7 456 use MyMod::Abc;
e476b1b5 457 ...
4358a253 458 MyMod::Abc::open($filename);
e476b1b5 459
7e6d00f8
PM
460Either the C<warnings::warn> or C<warnings::warnif> function should be
461used to actually display the warnings message. This is because they can
462make use of the feature that allows warnings to be escalated into fatal
463errors. So in this case
e476b1b5 464
d3a7d8c7
GS
465 use MyMod::Abc;
466 use warnings FATAL => 'MyMod::Abc';
e476b1b5 467 ...
d3a7d8c7 468 MyMod::Abc::open('../fred.txt');
e476b1b5 469
7e6d00f8 470the C<warnings::warnif> function will detect this and die after
d3a7d8c7 471displaying the warning message.
e476b1b5 472
7e6d00f8
PM
473The three warnings functions, C<warnings::warn>, C<warnings::warnif>
474and C<warnings::enabled> can optionally take an object reference in place
475of a category name. In this case the functions will use the class name
476of the object as the warnings category.
477
478Consider this example:
479
4358a253 480 package Original;
7e6d00f8 481
4358a253
SS
482 no warnings;
483 use warnings::register;
7e6d00f8
PM
484
485 sub new
486 {
4358a253
SS
487 my $class = shift;
488 bless [], $class;
7e6d00f8
PM
489 }
490
491 sub check
492 {
4358a253
SS
493 my $self = shift;
494 my $value = shift;
7e6d00f8
PM
495
496 if ($value % 2 && warnings::enabled($self))
497 { warnings::warn($self, "Odd numbers are unsafe") }
498 }
499
500 sub doit
501 {
4358a253
SS
502 my $self = shift;
503 my $value = shift;
504 $self->check($value);
7e6d00f8
PM
505 # ...
506 }
507
4358a253 508 1;
7e6d00f8 509
4358a253 510 package Derived;
7e6d00f8 511
4358a253
SS
512 use warnings::register;
513 use Original;
514 our @ISA = qw( Original );
7e6d00f8
PM
515 sub new
516 {
4358a253
SS
517 my $class = shift;
518 bless [], $class;
7e6d00f8
PM
519 }
520
13a2d996 521
4358a253 522 1;
7e6d00f8
PM
523
524The code below makes use of both modules, but it only enables warnings from
525C<Derived>.
526
4358a253
SS
527 use Original;
528 use Derived;
7e6d00f8 529 use warnings 'Derived';
63acfd00 530 my $a = Original->new();
4358a253 531 $a->doit(1);
63acfd00 532 my $b = Derived->new();
4358a253 533 $a->doit(1);
7e6d00f8
PM
534
535When this code is run only the C<Derived> object, C<$b>, will generate
536a warning.
537
538 Odd numbers are unsafe at main.pl line 7
539
540Notice also that the warning is reported at the line where the object is first
541used.
542
572bfd36
RS
543When registering new categories of warning, you can supply more names to
544warnings::register like this:
545
546 package MyModule;
547 use warnings::register qw(format precision);
548
549 ...
550
551 warnings::warnif('MyModule::format', '...');
552
0453d815
PM
553=head1 SEE ALSO
554
e476b1b5 555L<warnings>, L<perldiag>.
c47ff5f1 556
0453d815 557=head1 AUTHOR
c47ff5f1 558
0453d815 559Paul Marquess