This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlapi: Fix grammar
[perl5.git] / t / lib / warnings / pad
1   pad.c         AOK
2
3      "%s" variable %s masks earlier declaration in same scope
4         my $x;
5         my $x ;
6
7      Variable "%s" will not stay shared 
8         sub x {
9             my $x;
10             sub y {
11                 sub { $x }
12             }
13         }
14
15         sub x {
16             my $x;
17             sub y {
18                 $x
19             }
20         }
21
22     "our" variable %s redeclared        (Did you mean "local" instead of "our"?)
23         our $x;
24         {
25             our $x;
26         }
27
28     %s never introduced         [pad_leavemy]   TODO
29     
30 __END__
31 # pad.c
32 use warnings 'misc' ;
33 my $x ;
34 my $x ;
35 my $y = my $y ;
36 my $p ;
37 package X ;
38 my $p ;
39 package main ;
40 no warnings 'misc' ;
41 my $x ;
42 my $y ;
43 my $p ;
44 EXPECT
45 "my" variable $x masks earlier declaration in same scope at - line 4.
46 "my" variable $y masks earlier declaration in same statement at - line 5.
47 "my" variable $p masks earlier declaration in same scope at - line 8.
48 ########
49 # pad.c
50 use warnings 'misc' ;
51 our $x ;
52 my $x ;
53 our $y = my $y ;
54 our $p ;
55 package X ;
56 my $p ;
57 package main ;
58 no warnings 'misc' ;
59 our $z ;
60 my $z ;
61 our $t = my $t ;
62 our $q ;
63 package X ;
64 my $q ;
65 EXPECT
66 "my" variable $x masks earlier declaration in same scope at - line 4.
67 "my" variable $y masks earlier declaration in same statement at - line 5.
68 "my" variable $p masks earlier declaration in same scope at - line 8.
69 ########
70 # pad.c
71 use warnings 'misc' ;
72 my $x ;
73 our $x ;
74 my $y = our $y ;
75 my $p ;
76 package X ;
77 our $p ;
78 package main ;
79 no warnings 'misc' ;
80 my $z ;
81 our $z ;
82 my $t = our $t ;
83 my $q ;
84 package X ;
85 our $q ;
86 EXPECT
87 "our" variable $x masks earlier declaration in same scope at - line 4.
88 "our" variable $y masks earlier declaration in same statement at - line 5.
89 "our" variable $p masks earlier declaration in same scope at - line 8.
90 ########
91 # pad.c
92 use warnings 'closure' ;
93 sub x {
94       my $x;
95       sub y {
96          $x
97       }
98    }
99 EXPECT
100 Variable "$x" will not stay shared at - line 7.
101 ########
102 # pad.c
103 no warnings 'closure' ;
104 sub x {
105       my $x;
106       sub y {
107          $x
108       }
109    }
110 EXPECT
111
112 ########
113 # pad.c
114 use warnings 'closure' ;
115 sub x {
116       my $x;
117       sub y {
118          sub { $x }
119       }
120    }
121 EXPECT
122 Variable "$x" will not stay shared at - line 6.
123 ########
124 # pad.c
125 use warnings 'closure' ;
126 sub x {
127     my $x;
128     sub {
129         $x;
130         sub y {
131             $x
132         }
133     }->();
134 }
135 EXPECT
136 Variable "$x" will not stay shared at - line 9.
137 ########
138 # pad.c
139 use warnings 'closure' ;
140 my $x;
141 sub {
142     $x;
143     sub f {
144         sub { $x }->();
145     }
146 }->();
147 EXPECT
148
149 ########
150 # pad.c
151 use warnings 'closure' ;
152 sub {
153     my $x;
154     sub f { $x }
155 }->();
156 EXPECT
157 Variable "$x" is not available at - line 5.
158 ########
159 # pad.c
160 use warnings 'closure' ;
161 sub {
162     my $x;
163     eval 'sub f { $x }';
164 }->();
165 EXPECT
166
167 ########
168 # pad.c
169 use warnings 'closure' ;
170 sub {
171     my $x;
172     sub f { eval '$x' }
173 }->();
174 f();
175 EXPECT
176 Variable "$x" is not available at (eval 1) line 1.
177 ########
178 # pad.c
179 use warnings 'closure' ;
180 sub x {
181       our $x;
182       sub y {
183          $x
184       }
185    }
186 EXPECT
187
188 ########
189 # pad.c
190 # see bugid 1754
191 use warnings 'closure' ;
192 sub f {
193     my $x;
194     sub { eval '$x' };
195 }
196 f()->();
197 EXPECT
198 Variable "$x" is not available at (eval 1) line 1.
199 ########
200 use warnings 'closure' ;
201 {
202     my $x = 1;
203     $y = \$x; # force abandonment rather than clear-in-place at scope exit
204     sub f2 { eval '$x' }
205 }
206 f2();
207 EXPECT
208 Variable "$x" is not available at (eval 1) line 1.
209 ########
210 use warnings 'closure' ;
211 for my $x (1,2,3) {
212     sub f { eval '$x' }
213     f();
214 }
215 f();
216 EXPECT
217 Variable "$x" is not available at (eval 4) line 1.
218 ########
219 # pad.c
220 no warnings 'closure' ;
221 sub x {
222       my $x;
223       sub y {
224          sub { $x }
225       }
226    }
227 EXPECT
228
229 ########
230 # pad.c
231 use warnings 'closure';
232 my $x;
233 our $y;
234 sub { $x = $y }->();  # should not warn about $y being unavailable
235 EXPECT
236 ########
237 use warnings 'misc' ;
238 my $x;
239 {
240     my $x;
241 }
242 EXPECT
243 ########
244 # pad.c
245 use warnings 'misc' ;
246 our $x ;
247 our $x ;
248 our $y = our $y ;
249 our $p ;
250 package X ;
251 our $p ;
252 package main ;
253 no warnings 'misc' ;
254 our $a ;
255 our $a ;
256 our $b = our $b ;
257 our $c ;
258 package X ;
259 our $c ;
260 EXPECT
261 "our" variable $x redeclared at - line 4.
262 "our" variable $y redeclared at - line 5.
263 ########
264 use warnings 'misc' ;
265 our $x;
266 {
267     our $x;
268 }
269 our $x;
270 no warnings 'misc' ;
271 our $y;
272 {
273     our $y;
274 }
275 our $y;
276 EXPECT
277 "our" variable $x redeclared at - line 4.
278         (Did you mean "local" instead of "our"?)
279 "our" variable $x redeclared at - line 6.
280 ########
281 use warnings 'misc' ;
282 our $x;
283 {
284     my $x;
285 }
286 no warnings 'misc' ;
287 our $y;
288 {
289     my $y;
290 }
291 EXPECT
292 ########
293 use warnings 'misc' ;
294 my $x;
295 {
296     our $x;
297 }
298 no warnings 'misc' ;
299 my $y;
300 {
301     our $y;
302 }
303 EXPECT
304 ########
305 use warnings 'misc' ;
306 my $x;
307 {
308     my $x;
309 }
310 no warnings 'misc' ;
311 my $y;
312 {
313     my $y;
314 }
315 EXPECT
316 ########
317 # an our var being introduced should suppress errors about global syms
318 use strict;
319 use warnings;
320 our $x unless $x;
321 EXPECT
322 ########
323 use warnings 'misc';
324 our $qunckkk;
325 our $_;
326 package clank_est;
327 our $qunckkk;
328 our $_;
329 no warnings 'misc';
330 our $ouch;
331 our $_;
332 package whack;
333 our $ouch;
334 our $_;
335 EXPECT
336 "our" variable $_ redeclared at - line 6.
337 ########
338 use warnings 'misc';
339 BEGIN { binmode STDERR, 'utf8'; }
340 {
341     use utf8;
342     my $ニコニコ;
343     my $ニコニコ;
344 }
345 EXPECT
346 "my" variable $ニコニコ masks earlier declaration in same scope at - line 6.
347 ########
348 use warnings 'misc';
349 BEGIN { binmode STDERR, 'utf8'; }
350 {
351     use utf8;
352     my $thìs;
353     my $thìs;
354 }
355 EXPECT
356 "my" variable $thìs masks earlier declaration in same scope at - line 6.
357 ########
358 # pad.c
359 use warnings 'closure' ;
360 BEGIN { binmode STDERR, 'utf8'; }
361 sub {
362     use utf8;
363     my $è;
364     sub f { $è }
365 }->();
366 EXPECT
367 Variable "$è" is not available at - line 7.
368 ########
369 # pad.c
370 use warnings 'closure' ;
371 BEGIN { binmode STDERR, 'utf8'; }
372 sub {
373     use utf8;
374     my $ニ;
375     sub f { $ニ }
376 }->();
377 EXPECT
378 Variable "$ニ" is not available at - line 7.
379 ########
380 # pad.c
381 use warnings 'closure' ;
382 BEGIN { binmode STDERR, 'utf8'; }
383 sub x {
384       use utf8;
385       my $に;
386       sub y {
387          $に
388       }
389    }
390 EXPECT
391 Variable "$に" will not stay shared at - line 9.
392 ########
393 # pad.c
394 use warnings 'closure' ;
395 BEGIN { binmode STDERR, 'utf8'; }
396 sub x {
397       use utf8;
398       my $に;
399       sub y {
400          sub { $に }
401       }
402    }
403 EXPECT
404 Variable "$に" will not stay shared at - line 8.
405 ########
406 # pad.c
407 use warnings 'closure' ;
408 BEGIN { binmode STDERR, 'utf8'; }
409 sub x {
410     use utf8;
411     my $に;
412     sub {
413         $に;
414         sub y {
415             $に
416         }
417     }->();
418 }
419 EXPECT
420 Variable "$に" will not stay shared at - line 11.
421 ########
422 # pad.c
423 use warnings 'closure' ;
424 BEGIN { binmode STDERR, 'utf8'; }
425 sub {
426     use utf8;
427     my $に;
428     sub f { $に }
429 }->();
430 EXPECT
431 Variable "$に" is not available at - line 7.
432 ########
433 # pad.c
434 use warnings 'closure' ;
435 BEGIN { binmode STDERR, 'utf8'; }
436 sub {
437     use utf8;
438     my $に;
439     sub f { eval '$に' }
440 }->();
441 f();
442 EXPECT
443 Variable "$に" is not available at (eval 1) line 1.
444 ########
445 # pad.c
446 # see bugid 1754
447 use warnings 'closure' ;
448 BEGIN { binmode STDERR, 'utf8'; }
449 sub f {
450     use utf8;
451     my $に;
452     sub { eval '$に' };
453 }
454 f()->();
455 EXPECT
456 Variable "$に" is not available at (eval 1) line 1.
457 ########
458 use warnings 'closure' ;
459 BEGIN { binmode STDERR, 'utf8'; }
460 {
461     use utf8;
462     my $に = 1;
463     $y = \$に; # force abandonment rather than clear-in-place at scope exit
464     sub f2 { eval '$に' }
465 }
466 f2();
467 EXPECT
468 Variable "$に" is not available at (eval 1) line 1.
469 ########
470 use warnings 'closure' ;
471 BEGIN { binmode STDERR, 'utf8'; }
472 use utf8;
473 for my $に (1,2,3) {
474     sub f { eval '$に' }
475     f();
476 }
477 f();
478 EXPECT
479 Variable "$に" is not available at (eval 4) line 1.
480 ########
481 # pad.c
482 use warnings 'closure' ;
483 BEGIN { binmode STDERR, 'utf8'; }
484 sub x {
485       use utf8;
486       my $è;
487       sub y {
488          $è
489       }
490    }
491 EXPECT
492 Variable "$è" will not stay shared at - line 9.
493 ########
494 # pad.c
495 use warnings 'closure' ;
496 BEGIN { binmode STDERR, 'utf8'; }
497 sub x {
498       use utf8;
499       my $è;
500       sub y {
501          sub { $è }
502       }
503    }
504 EXPECT
505 Variable "$è" will not stay shared at - line 8.
506 ########
507 # pad.c
508 use warnings 'closure' ;
509 BEGIN { binmode STDERR, 'utf8'; }
510 sub x {
511     use utf8;
512     my $è;
513     sub {
514         $è;
515         sub y {
516             $è
517         }
518     }->();
519 }
520 EXPECT
521 Variable "$è" will not stay shared at - line 11.
522 ########
523 # pad.c
524 use warnings 'closure' ;
525 BEGIN { binmode STDERR, 'utf8'; }
526 sub {
527     use utf8;
528     my $è;
529     sub f { $è }
530 }->();
531 EXPECT
532 Variable "$è" is not available at - line 7.
533 ########
534 # pad.c
535 use warnings 'closure' ;
536 BEGIN { binmode STDERR, 'utf8'; }
537 sub {
538     use utf8;
539     my $è;
540     sub f { eval '$è' }
541 }->();
542 f();
543 EXPECT
544 Variable "$è" is not available at (eval 1) line 1.
545 ########
546 # pad.c
547 # see bugid 1754
548 use warnings 'closure' ;
549 BEGIN { binmode STDERR, 'utf8'; }
550 sub f {
551     use utf8;
552     my $è;
553     sub { eval '$è' };
554 }
555 f()->();
556 EXPECT
557 Variable "$è" is not available at (eval 1) line 1.
558 ########
559 use warnings 'closure' ;
560 BEGIN { binmode STDERR, 'utf8'; }
561 {
562     use utf8;
563     my $è = 1;
564     $y = \$è; # force abandonment rather than clear-in-place at scope exit
565     sub f2 { eval '$è' }
566 }
567 f2();
568 EXPECT
569 Variable "$è" is not available at (eval 1) line 1.
570 ########
571 use warnings 'closure' ;
572 BEGIN { binmode STDERR, 'utf8'; }
573 use utf8;
574 for my $è (1,2,3) {
575     sub f { eval '$è' }
576     f();
577 }
578 f();
579 EXPECT
580 Variable "$è" is not available at (eval 4) line 1.
581 ########