This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Module::Load::Conditional from version 0.54 to 0.56
[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
f2a78a48
FC
215=for comment
216This tree is generated by regen/warnings.pl. Any changes made here
217will be lost.
218
219=for warnings.pl begin
220
6f87cb12
FC
221 all -+
222 |
223 +- closure
224 |
225 +- deprecated
226 |
227 +- exiting
228 |
f1d34ca8
FC
229 +- experimental --+
230 | |
231 | +- experimental::lexical_subs
f2a78a48
FC
232 | |
233 | +- experimental::lexical_topic
234 | |
235 | +- experimental::regex_sets
236 | |
237 | +- experimental::smartmatch
6f87cb12
FC
238 |
239 +- glob
240 |
241 +- imprecision
242 |
243 +- io ------------+
244 | |
245 | +- closed
246 | |
247 | +- exec
248 | |
249 | +- layer
250 | |
251 | +- newline
252 | |
253 | +- pipe
254 | |
c8028aa6
TC
255 | +- syscalls
256 | |
6f87cb12
FC
257 | +- unopened
258 |
259 +- misc
260 |
261 +- numeric
262 |
263 +- once
264 |
265 +- overflow
266 |
267 +- pack
268 |
269 +- portable
270 |
271 +- recursion
272 |
273 +- redefine
274 |
275 +- regexp
276 |
277 +- severe --------+
278 | |
279 | +- debugging
280 | |
281 | +- inplace
282 | |
283 | +- internal
284 | |
285 | +- malloc
286 |
287 +- signal
288 |
289 +- substr
290 |
291 +- syntax --------+
292 | |
293 | +- ambiguous
294 | |
295 | +- bareword
296 | |
297 | +- digit
298 | |
299 | +- illegalproto
300 | |
301 | +- parenthesis
302 | |
303 | +- precedence
304 | |
305 | +- printf
306 | |
307 | +- prototype
308 | |
309 | +- qw
310 | |
311 | +- reserved
312 | |
313 | +- semicolon
314 |
315 +- taint
316 |
317 +- threads
318 |
319 +- uninitialized
320 |
321 +- unpack
322 |
323 +- untie
324 |
325 +- utf8 ----------+
326 | |
327 | +- non_unicode
328 | |
329 | +- nonchar
330 | |
331 | +- surrogate
332 |
333 +- void
0453d815 334
f2a78a48
FC
335=for warnings.pl end
336
4438c4b7
JH
337Just like the "strict" pragma any of these categories can be combined
338
4358a253
SS
339 use warnings qw(void redefine);
340 no warnings qw(io syntax untie);
4438c4b7
JH
341
342Also like the "strict" pragma, if there is more than one instance of the
e476b1b5 343C<warnings> pragma in a given scope the cumulative effect is additive.
4438c4b7 344
4358a253 345 use warnings qw(void); # only "void" warnings enabled
4438c4b7 346 ...
4358a253 347 use warnings qw(io); # only "void" & "io" warnings enabled
4438c4b7 348 ...
4358a253 349 no warnings qw(void); # only "io" warnings enabled
4438c4b7 350
e476b1b5
GS
351To determine which category a specific warning has been assigned to see
352L<perldiag>.
0453d815 353
12bcd1a6
PM
354Note: In Perl 5.6.1, the lexical warnings category "deprecated" was a
355sub-category of the "syntax" category. It is now a top-level category
356in its own right.
357
0453d815 358=head2 Fatal Warnings
d74e8afc 359X<warning, fatal>
c47ff5f1 360
0453d815 361The presence of the word "FATAL" in the category list will escalate any
e476b1b5 362warnings detected from the categories specified in the lexical scope
f1f33818
PM
363into fatal errors. In the code below, the use of C<time>, C<length>
364and C<join> can all produce a C<"Useless use of xxx in void context">
365warning.
4438c4b7 366
4358a253 367 use warnings;
cea6626f 368
4358a253 369 time;
cea6626f 370
0453d815 371 {
4358a253
SS
372 use warnings FATAL => qw(void);
373 length "abc";
0453d815 374 }
cea6626f 375
4358a253 376 join "", 1,2,3;
cea6626f 377
4358a253 378 print "done\n";
f1f33818
PM
379
380When run it produces this output
381
382 Useless use of time in void context at fatal line 3.
383 Useless use of length in void context at fatal line 7.
384
385The scope where C<length> is used has escalated the C<void> warnings
386category into a fatal error, so the program terminates immediately it
387encounters the warning.
c47ff5f1 388
6e9af7e4
PM
389To explicitly turn off a "FATAL" warning you just disable the warning
390it is associated with. So, for example, to disable the "void" warning
391in the example above, either of these will do the trick:
08540116
PM
392
393 no warnings qw(void);
394 no warnings FATAL => qw(void);
0453d815 395
6e9af7e4
PM
396If you want to downgrade a warning that has been escalated into a fatal
397error back to a normal warning, you can use the "NONFATAL" keyword. For
398example, the code below will promote all warnings into fatal errors,
399except for those in the "syntax" category.
400
401 use warnings FATAL => 'all', NONFATAL => 'syntax';
402
e476b1b5 403=head2 Reporting Warnings from a Module
d74e8afc 404X<warning, reporting> X<warning, registering>
e476b1b5 405
d3a7d8c7
GS
406The C<warnings> pragma provides a number of functions that are useful for
407module authors. These are used when you want to report a module-specific
7e6d00f8 408warning to a calling module has enabled warnings via the C<warnings>
d3a7d8c7 409pragma.
e476b1b5 410
d3a7d8c7 411Consider the module C<MyMod::Abc> below.
e476b1b5 412
d3a7d8c7 413 package MyMod::Abc;
e476b1b5 414
d3a7d8c7
GS
415 use warnings::register;
416
417 sub open {
4358a253 418 my $path = shift;
7ddf7bb5 419 if ($path !~ m#^/#) {
2359510d 420 warnings::warn("changing relative path to /var/abc")
7ddf7bb5 421 if warnings::enabled();
2359510d 422 $path = "/var/abc/$path";
d3a7d8c7
GS
423 }
424 }
425
4358a253 426 1;
d3a7d8c7
GS
427
428The call to C<warnings::register> will create a new warnings category
c901ad27 429called "MyMod::Abc", i.e. the new category name matches the current
7e6d00f8
PM
430package name. The C<open> function in the module will display a warning
431message if it gets given a relative path as a parameter. This warnings
432will only be displayed if the code that uses C<MyMod::Abc> has actually
433enabled them with the C<warnings> pragma like below.
d3a7d8c7
GS
434
435 use MyMod::Abc;
436 use warnings 'MyMod::Abc';
437 ...
438 abc::open("../fred.txt");
439
440It is also possible to test whether the pre-defined warnings categories are
441set in the calling module with the C<warnings::enabled> function. Consider
442this snippet of code:
443
444 package MyMod::Abc;
445
446 sub open {
7e6d00f8 447 warnings::warnif("deprecated",
4358a253
SS
448 "open is deprecated, use new instead");
449 new(@_);
e476b1b5 450 }
6bc102ca 451
e476b1b5
GS
452 sub new
453 ...
4358a253 454 1;
e476b1b5
GS
455
456The function C<open> has been deprecated, so code has been included to
457display a warning message whenever the calling module has (at least) the
458"deprecated" warnings category enabled. Something like this, say.
459
460 use warnings 'deprecated';
d3a7d8c7 461 use MyMod::Abc;
e476b1b5 462 ...
4358a253 463 MyMod::Abc::open($filename);
e476b1b5 464
7e6d00f8
PM
465Either the C<warnings::warn> or C<warnings::warnif> function should be
466used to actually display the warnings message. This is because they can
467make use of the feature that allows warnings to be escalated into fatal
468errors. So in this case
e476b1b5 469
d3a7d8c7
GS
470 use MyMod::Abc;
471 use warnings FATAL => 'MyMod::Abc';
e476b1b5 472 ...
d3a7d8c7 473 MyMod::Abc::open('../fred.txt');
e476b1b5 474
7e6d00f8 475the C<warnings::warnif> function will detect this and die after
d3a7d8c7 476displaying the warning message.
e476b1b5 477
7e6d00f8
PM
478The three warnings functions, C<warnings::warn>, C<warnings::warnif>
479and C<warnings::enabled> can optionally take an object reference in place
480of a category name. In this case the functions will use the class name
481of the object as the warnings category.
482
483Consider this example:
484
4358a253 485 package Original;
7e6d00f8 486
4358a253
SS
487 no warnings;
488 use warnings::register;
7e6d00f8
PM
489
490 sub new
491 {
4358a253
SS
492 my $class = shift;
493 bless [], $class;
7e6d00f8
PM
494 }
495
496 sub check
497 {
4358a253
SS
498 my $self = shift;
499 my $value = shift;
7e6d00f8
PM
500
501 if ($value % 2 && warnings::enabled($self))
502 { warnings::warn($self, "Odd numbers are unsafe") }
503 }
504
505 sub doit
506 {
4358a253
SS
507 my $self = shift;
508 my $value = shift;
509 $self->check($value);
7e6d00f8
PM
510 # ...
511 }
512
4358a253 513 1;
7e6d00f8 514
4358a253 515 package Derived;
7e6d00f8 516
4358a253
SS
517 use warnings::register;
518 use Original;
519 our @ISA = qw( Original );
7e6d00f8
PM
520 sub new
521 {
4358a253
SS
522 my $class = shift;
523 bless [], $class;
7e6d00f8
PM
524 }
525
13a2d996 526
4358a253 527 1;
7e6d00f8
PM
528
529The code below makes use of both modules, but it only enables warnings from
530C<Derived>.
531
4358a253
SS
532 use Original;
533 use Derived;
7e6d00f8 534 use warnings 'Derived';
63acfd00 535 my $a = Original->new();
4358a253 536 $a->doit(1);
63acfd00 537 my $b = Derived->new();
4358a253 538 $a->doit(1);
7e6d00f8
PM
539
540When this code is run only the C<Derived> object, C<$b>, will generate
541a warning.
542
543 Odd numbers are unsafe at main.pl line 7
544
545Notice also that the warning is reported at the line where the object is first
546used.
547
572bfd36
RS
548When registering new categories of warning, you can supply more names to
549warnings::register like this:
550
551 package MyModule;
552 use warnings::register qw(format precision);
553
554 ...
555
556 warnings::warnif('MyModule::format', '...');
557
0453d815
PM
558=head1 SEE ALSO
559
e476b1b5 560L<warnings>, L<perldiag>.
c47ff5f1 561
0453d815 562=head1 AUTHOR
c47ff5f1 563
0453d815 564Paul Marquess