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