This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #130335) fix numeric comparison for sort's built-in compare
[perl5.git] / t / lib / warnings / 9uninit
1 DAPM 4/2004.
2
3 Test the appearance of variable names in "Use of uninitialized value"
4 warnings.
5
6 The following ops aren't tested, mainly because they do IO or non-portable
7 stuff:
8
9     send recv bind conect listen accept shutdown chdir chown chroot unlink
10     chmod utime rename link symlink readlink mkdir rmdir opendir seekdir
11     system exec kill getpgrp alarm sleep dofile require gethostbyname
12     gethostbyaddr getnetbyname getnetbyaddr getprotobyname getprotobynumber
13     getservbyname getservbyport sethostent setnetent setprotoent setservent
14     getpwnam getpwuid getgrnam getgrgid waitpid setpgrp setpriority
15     getpriority syscall dbmopen ioctl fcntl truncate getsockopt setsockopt
16     semctl semop semget msgget msgctl msgsnd msgrcv shmget shmctl shmread
17     shmwrite
18
19     ---------------------------------------------------
20
21
22 __END__
23 use warnings 'uninitialized';
24 my ($m1, $m2, $v);
25
26 $v = $m1 + 10;
27 $v = 22 + $m2;
28 $v = $m1 + $m2;
29 EXPECT
30 Use of uninitialized value $m1 in addition (+) at - line 4.
31 Use of uninitialized value $m2 in addition (+) at - line 5.
32 Use of uninitialized value $m2 in addition (+) at - line 6.
33 Use of uninitialized value $m1 in addition (+) at - line 6.
34 ########
35 use warnings 'uninitialized';
36 use utf8;
37 use open qw( :utf8 :std );
38
39 $v = $à1 + 10;
40 $v = 22 + $a2;
41 $v = $à1 + $a2;
42 EXPECT
43 Use of uninitialized value $à1 in addition (+) at - line 5.
44 Use of uninitialized value $a2 in addition (+) at - line 6.
45 Use of uninitialized value $a2 in addition (+) at - line 7.
46 Use of uninitialized value $à1 in addition (+) at - line 7.
47 ########
48 use warnings 'uninitialized';
49 my ($m1, $v);
50 our ($g1, $g2);
51
52 $v = $g1 + 21;
53 $v = 31 + $g2;
54 $v = $g1 + $g2;
55 $v = $m1 + $g2;
56 EXPECT
57 Use of uninitialized value $g1 in addition (+) at - line 5.
58 Use of uninitialized value $g2 in addition (+) at - line 6.
59 Use of uninitialized value $g2 in addition (+) at - line 7.
60 Use of uninitialized value $g1 in addition (+) at - line 7.
61 Use of uninitialized value $g2 in addition (+) at - line 8.
62 Use of uninitialized value $m1 in addition (+) at - line 8.
63 ########
64 use warnings 'uninitialized';
65 my ($m1, @ma, $v);
66
67 $v = $ma[5] + 45;
68 $v = 56 + $ma[6];
69 $v = $ma[7] + $m1;
70 $v = $ma[8] + $ma[9];
71 $v = $ma[-1] + $ma[-2];
72 EXPECT
73 Use of uninitialized value $ma[5] in addition (+) at - line 4.
74 Use of uninitialized value $ma[6] in addition (+) at - line 5.
75 Use of uninitialized value $m1 in addition (+) at - line 6.
76 Use of uninitialized value in addition (+) at - line 6.
77 Use of uninitialized value in addition (+) at - line 7.
78 Use of uninitialized value in addition (+) at - line 7.
79 Use of uninitialized value in addition (+) at - line 8.
80 Use of uninitialized value in addition (+) at - line 8.
81 ########
82 use warnings 'uninitialized';
83 my ($v);
84 my @mau = (undef) x 258;
85 my %mhu = ('foo', undef, 'bar', undef);
86
87 $v = $mau[5] + 23;
88 $v = $mau[-5] + 45;
89 $v = 56 + $mau[6];
90 $v = 78 + $mau[-6];
91 $v = $mau[7] + $mau[8];
92 $v = $mau[256] + $mau[257];
93 $v = $mau[-1] + $mau[-2];
94 $v = $mhu{foo} + $mhu{bar};
95 EXPECT
96 Use of uninitialized value $mau[5] in addition (+) at - line 6.
97 Use of uninitialized value $mau[-5] in addition (+) at - line 7.
98 Use of uninitialized value $mau[6] in addition (+) at - line 8.
99 Use of uninitialized value $mau[-6] in addition (+) at - line 9.
100 Use of uninitialized value $mau[8] in addition (+) at - line 10.
101 Use of uninitialized value $mau[7] in addition (+) at - line 10.
102 Use of uninitialized value $mau[257] in addition (+) at - line 11.
103 Use of uninitialized value $mau[256] in addition (+) at - line 11.
104 Use of uninitialized value $mau[-2] in addition (+) at - line 12.
105 Use of uninitialized value $mau[-1] in addition (+) at - line 12.
106 Use of uninitialized value $mhu{"bar"} in addition (+) at - line 13.
107 Use of uninitialized value $mhu{"foo"} in addition (+) at - line 13.
108 ########
109 use warnings 'uninitialized';
110 my ($v);
111 our (@ga);
112
113 $v = $ga[8] + 21;
114 $v = $ga[-8] + 46;
115 $v = 57 + $ga[9];
116 $v = 58 + $ga[-9];
117 $v = $ga[10] + $ga[11];
118 $v = $ga[-10] + $ga[-11];
119 EXPECT
120 Use of uninitialized value $ga[8] in addition (+) at - line 5.
121 Use of uninitialized value $ga[-8] in addition (+) at - line 6.
122 Use of uninitialized value $ga[9] in addition (+) at - line 7.
123 Use of uninitialized value $ga[-9] in addition (+) at - line 8.
124 Use of uninitialized value in addition (+) at - line 9.
125 Use of uninitialized value in addition (+) at - line 9.
126 Use of uninitialized value in addition (+) at - line 10.
127 Use of uninitialized value in addition (+) at - line 10.
128 ########
129 use warnings 'uninitialized';
130 my ($v);
131 our @gau = (undef) x 258;
132 our %ghu = ('foo', undef, 'bar', undef);
133
134 $v = $gau[8] + 46;
135 $v = $gau[-8] + 47;
136 $v = 57 + $gau[9];
137 $v = 57 + $gau[-9];
138 $v = $gau[10] + $gau[11];
139 $v = $gau[256] + $gau[257];
140 $v = $gau[-1] + $gau[-2];
141 $v = $ghu{foo} + $ghu{bar};
142 EXPECT
143 Use of uninitialized value $gau[8] in addition (+) at - line 6.
144 Use of uninitialized value $gau[-8] in addition (+) at - line 7.
145 Use of uninitialized value $gau[9] in addition (+) at - line 8.
146 Use of uninitialized value $gau[-9] in addition (+) at - line 9.
147 Use of uninitialized value $gau[11] in addition (+) at - line 10.
148 Use of uninitialized value $gau[10] in addition (+) at - line 10.
149 Use of uninitialized value $gau[257] in addition (+) at - line 11.
150 Use of uninitialized value $gau[256] in addition (+) at - line 11.
151 Use of uninitialized value $gau[-2] in addition (+) at - line 12.
152 Use of uninitialized value $gau[-1] in addition (+) at - line 12.
153 Use of uninitialized value $ghu{"bar"} in addition (+) at - line 13.
154 Use of uninitialized value $ghu{"foo"} in addition (+) at - line 13.
155 ########
156 use warnings 'uninitialized';
157 my ($v);
158 our @gau = (undef) x 258;
159 our %ghu = ('foo', undef, 'bar', undef);
160 my @mau = (undef) x 258;
161 my %mhu = ('foo', undef, 'bar', undef);
162
163 my $i1 = 10;
164 my $i2 = 20;
165 my $i3 = 2000;
166 my $k1 = 'foo';
167 my $k2 = 'bar';
168 my $k3 = 'baz';
169 $v = $mau[$i1] + $mau[$i2];
170 $v = $gau[$i1] + $gau[$i2];
171 $v = $gau[$i1] + $gau[$i3];
172 $v = $mhu{$k1} + $mhu{$k2};
173 $v = $ghu{$k1} + $ghu{$k2};
174 $v = $ghu{$k1} + $ghu{$k3};
175 EXPECT
176 Use of uninitialized value $mau[20] in addition (+) at - line 14.
177 Use of uninitialized value $mau[10] in addition (+) at - line 14.
178 Use of uninitialized value $gau[20] in addition (+) at - line 15.
179 Use of uninitialized value $gau[10] in addition (+) at - line 15.
180 Use of uninitialized value in addition (+) at - line 16.
181 Use of uninitialized value $gau[10] in addition (+) at - line 16.
182 Use of uninitialized value $mhu{"bar"} in addition (+) at - line 17.
183 Use of uninitialized value $mhu{"foo"} in addition (+) at - line 17.
184 Use of uninitialized value $ghu{"bar"} in addition (+) at - line 18.
185 Use of uninitialized value $ghu{"foo"} in addition (+) at - line 18.
186 Use of uninitialized value in addition (+) at - line 19.
187 Use of uninitialized value $ghu{"foo"} in addition (+) at - line 19.
188 ########
189 use warnings 'uninitialized';
190 my ($m1, $m2, @ma, %mh, $v);
191 our ($g1, $g2, @ga, %gh);
192
193 $v = $ma[$m1];
194 $v = $ma[$g1];
195 $v = $ga[$m2];
196 $v = $ga[$g2];
197
198 $v = $mh{$m1};
199 $v = $mh{$g1};
200 $v = $gh{$m2};
201 $v = $gh{$g2};
202
203 $v = $m1+($m2-$g1);
204 $v = $ma[$ga[3]];
205 $v = $ga[$ma[4]];
206 EXPECT
207 Use of uninitialized value $m1 in array element at - line 5.
208 Use of uninitialized value $g1 in array element at - line 6.
209 Use of uninitialized value $m2 in array element at - line 7.
210 Use of uninitialized value $g2 in array element at - line 8.
211 Use of uninitialized value $m1 in hash element at - line 10.
212 Use of uninitialized value $g1 in hash element at - line 11.
213 Use of uninitialized value $m2 in hash element at - line 12.
214 Use of uninitialized value $g2 in hash element at - line 13.
215 Use of uninitialized value $g1 in subtraction (-) at - line 15.
216 Use of uninitialized value $m2 in subtraction (-) at - line 15.
217 Use of uninitialized value $m1 in addition (+) at - line 15.
218 Use of uninitialized value $ga[3] in array element at - line 16.
219 Use of uninitialized value $ma[4] in array element at - line 17.
220 ########
221 use warnings 'uninitialized';
222 my (@ma, %mh, $v);
223 our (@ga, %gh);
224
225 $v = sin $ga[1000];
226 $v = sin $ma[1000];
227 $v = sin $gh{foo};
228 $v = sin $mh{bar};
229
230 $v = sin $ga[$$];
231 $v = sin $ma[$$];
232 $v = sin $gh{$$};
233 $v = sin $mh{$$};
234 EXPECT
235 Use of uninitialized value $ga[1000] in sin at - line 5.
236 Use of uninitialized value $ma[1000] in sin at - line 6.
237 Use of uninitialized value $gh{"foo"} in sin at - line 7.
238 Use of uninitialized value $mh{"bar"} in sin at - line 8.
239 Use of uninitialized value within @ga in sin at - line 10.
240 Use of uninitialized value within @ma in sin at - line 11.
241 Use of uninitialized value within %gh in sin at - line 12.
242 Use of uninitialized value within %mh in sin at - line 13.
243 ########
244 use warnings 'uninitialized';
245 my (@mat, %mht, $v);
246 sub X::TIEARRAY { bless [], 'X' }
247 sub X::TIEHASH { bless [], 'X' }
248 sub X::FETCH { undef }
249 tie @mat, 'X';
250 tie %mht, 'X';
251 my $key1 = 'akey';
252 my $key2 = 'bkey';
253 my $index1 = 33;
254 my $index2 = 55;
255
256 $v = sin $mat[0];
257 $v = $mat[0] + $mat[1];
258 $v = sin $mat[1000];
259 $v = $mat[1000] + $mat[1001];
260
261 $v = sin $mat[$index1];
262 $v = $mat[$index1] + $mat[$index2];
263
264 $v = sin $mht{foo};
265 $v = $mht{foo} + $mht{bar};
266
267 $v = sin $mht{$key1};
268 $v = $mht{$key1} + $mht{$key2};
269
270 $v = $1+1;
271 EXPECT
272 Use of uninitialized value $mat[0] in sin at - line 13.
273 Use of uninitialized value in addition (+) at - line 14.
274 Use of uninitialized value in addition (+) at - line 14.
275 Use of uninitialized value $mat[1000] in sin at - line 15.
276 Use of uninitialized value in addition (+) at - line 16.
277 Use of uninitialized value in addition (+) at - line 16.
278 Use of uninitialized value within @mat in sin at - line 18.
279 Use of uninitialized value in addition (+) at - line 19.
280 Use of uninitialized value in addition (+) at - line 19.
281 Use of uninitialized value $mht{"foo"} in sin at - line 21.
282 Use of uninitialized value in addition (+) at - line 22.
283 Use of uninitialized value in addition (+) at - line 22.
284 Use of uninitialized value within %mht in sin at - line 24.
285 Use of uninitialized value in addition (+) at - line 25.
286 Use of uninitialized value in addition (+) at - line 25.
287 Use of uninitialized value $1 in addition (+) at - line 27.
288 ########
289 use warnings 'uninitialized';
290 my ($m1);
291 our ($g1, @ga);
292
293 print $ga[1000];
294 print STDERR $ga[1000];
295 print STDERR $m1, $g1, $ga[1],$m2;
296 print STDERR "", $ga[1],"";
297 EXPECT
298 Use of uninitialized value in print at - line 5.
299 Use of uninitialized value in print at - line 6.
300 Use of uninitialized value $m1 in print at - line 7.
301 Use of uninitialized value $g1 in print at - line 7.
302 Use of uninitialized value in print at - line 7.
303 Use of uninitialized value $m2 in print at - line 7.
304 Use of uninitialized value in print at - line 8.
305 ########
306 use warnings 'uninitialized';
307 my ($m1);
308 our ($g1);
309
310 close $m1;      # exercises rv2gv
311 close $g1;      # exercises rv2gv
312 close undef;    # exercises rv2gv
313 EXPECT
314 Use of uninitialized value $m1 in ref-to-glob cast at - line 5.
315 Use of uninitialized value $g1 in ref-to-glob cast at - line 6.
316 Use of uninitialized value in ref-to-glob cast at - line 7.
317 ########
318 use warnings 'uninitialized';
319 my ($m1, $m2, $v);
320 our ($g1, $g2);
321
322 $v = $$m1;
323 $v = $$g1;
324
325 $v = @$m1;
326 $v = @$g1;
327 $v = %$m2;
328 $v = %$g2;
329
330 $v = ${"foo.bar"}+1;
331 $v = ${"foo$m1"}+1;
332 $v = ${"foo$g1"}+1;
333 EXPECT
334 Use of uninitialized value $m1 in scalar dereference at - line 5.
335 Use of uninitialized value $g1 in scalar dereference at - line 6.
336 Use of uninitialized value $m1 in array dereference at - line 8.
337 Use of uninitialized value $g1 in array dereference at - line 9.
338 Use of uninitialized value $m2 in hash dereference at - line 10.
339 Use of uninitialized value $g2 in hash dereference at - line 11.
340 Use of uninitialized value in addition (+) at - line 13.
341 Use of uninitialized value $m1 in concatenation (.) or string at - line 14.
342 Use of uninitialized value in addition (+) at - line 14.
343 Use of uninitialized value $g1 in concatenation (.) or string at - line 15.
344 Use of uninitialized value in addition (+) at - line 15.
345 ########
346 use warnings 'uninitialized';
347 my ($m1, $v);
348 our ($g1);
349
350 $v = $m1 | $m2;
351 $v = $m1 & $m2;
352 $v = $m1 ^ $m2;
353 $v = ~$m1;
354
355 $v = $g1 | $g2;
356 $v = $g1 & $g2;
357 $v = $g1 ^ $g2;
358 $v = ~$g1;
359 EXPECT
360 Use of uninitialized value $m1 in bitwise or (|) at - line 5.
361 Use of uninitialized value $m2 in bitwise or (|) at - line 5.
362 Use of uninitialized value $m1 in bitwise and (&) at - line 6.
363 Use of uninitialized value $m2 in bitwise and (&) at - line 6.
364 Use of uninitialized value $m1 in bitwise xor (^) at - line 7.
365 Use of uninitialized value $m2 in bitwise xor (^) at - line 7.
366 Use of uninitialized value $m1 in 1's complement (~) at - line 8.
367 Use of uninitialized value $g1 in bitwise or (|) at - line 10.
368 Use of uninitialized value $g2 in bitwise or (|) at - line 10.
369 Use of uninitialized value $g1 in bitwise and (&) at - line 11.
370 Use of uninitialized value $g2 in bitwise and (&) at - line 11.
371 Use of uninitialized value $g1 in bitwise xor (^) at - line 12.
372 Use of uninitialized value $g2 in bitwise xor (^) at - line 12.
373 Use of uninitialized value $g1 in 1's complement (~) at - line 13.
374 ########
375 use warnings 'uninitialized';
376 my ($v);
377
378 my  $tmp1; $v = $tmp1++; # (doesn't warn)
379 our $tmp2; $v = $tmp2++; # (doesn't warn)
380 my  $tmp3; $v = ++$tmp1; # (doesn't warn)
381 our $tmp4; $v = ++$tmp2; # (doesn't warn)
382
383 my  $tmp5; $v = $tmp5--; # (doesn't warn)
384 our $tmp6; $v = $tmp6--; # (doesn't warn)
385 my  $tmp7; $v = --$tmp7; # (doesn't warn)
386 our $tmp8; $v = --$tmp8; # (doesn't warn)
387 EXPECT
388 ########
389 use warnings 'uninitialized';
390
391 my $s1; chomp $s1;
392 my $s2; chop  $s2;
393 my ($s3,$s4); chomp ($s3,$s4);
394 my ($s5,$s6); chop  ($s5,$s6);
395 EXPECT
396 Use of uninitialized value $s1 in scalar chomp at - line 3.
397 Use of uninitialized value $s2 in scalar chop at - line 4.
398 Use of uninitialized value $s3 in chomp at - line 5.
399 Use of uninitialized value $s4 in chomp at - line 5.
400 Use of uninitialized value $s5 in chop at - line 6.
401 Use of uninitialized value $s6 in chop at - line 6.
402 ########
403 use warnings 'uninitialized';
404 my ($m1);
405
406 local $/ =\$m1;
407 my $x = "abc";
408 chomp $x; chop $x;
409 my $y;
410 chomp ($x, $y); chop ($x, $y);
411 EXPECT
412 Use of uninitialized value $m1 in scalar assignment at - line 4.
413 Use of uninitialized value $m1 in scalar assignment at - line 4.
414 Setting $/ to a reference to zero as a form of slurp is deprecated, treating as undef at - line 4.
415 Use of uninitialized value $y in chop at - line 8.
416 ########
417 use warnings 'uninitialized';
418 my ($m1, @ma, %mh);
419 our ($g1);
420
421 delete $ma[$m1];
422 delete @ma[$m1, $g1];
423 delete $mh{$m1};
424 delete @mh{$m1, $g1};
425 EXPECT
426 Use of uninitialized value $m1 in delete at - line 5.
427 Use of uninitialized value $m1 in delete at - line 6.
428 Use of uninitialized value $g1 in delete at - line 6.
429 Use of uninitialized value $m1 in delete at - line 7.
430 Use of uninitialized value $m1 in delete at - line 8.
431 Use of uninitialized value $g1 in delete at - line 8.
432 ########
433 use warnings 'uninitialized';
434 my ($m1, @ma, %mh);
435 our ($g1);
436
437 my @a = @ma[$m1, $g1];
438 @a = (4,5)[$m1, $g1];
439 @a = @mh{$m1, $g1};
440 EXPECT
441 Use of uninitialized value $m1 in array slice at - line 5.
442 Use of uninitialized value $g1 in array slice at - line 5.
443 Use of uninitialized value $m1 in list slice at - line 6.
444 Use of uninitialized value $g1 in list slice at - line 6.
445 Use of uninitialized value $m1 in hash slice at - line 7.
446 Use of uninitialized value $g1 in hash slice at - line 7.
447 ########
448 use warnings 'uninitialized';
449 my ($m1, @ma, %mh, $v);
450 our ($g1, @ga, %gh);
451
452 $v = exists $ma[$m1];
453 $v = exists $ga[$g1];
454 $v = exists $mh{$m1};
455 $v = exists $gh{$g1};
456 EXPECT
457 Use of uninitialized value $m1 in exists at - line 5.
458 Use of uninitialized value $g1 in exists at - line 6.
459 Use of uninitialized value $m1 in exists at - line 7.
460 Use of uninitialized value $g1 in exists at - line 8.
461 ########
462 use warnings 'uninitialized';
463 my ($m1, $m2);
464 my ($v, @a);
465 my ($t, $u) = (1, 1);
466
467 local $.;
468
469 @ma = (1   .. 2);
470 @ma = ($t  .. 2);
471 @ma = ($m1 .. 2);
472 @ma = (1   .. $u);
473 @ma = (1   .. $m2);
474
475 @ma = (1   ... 2);
476 @ma = ($t  ... 2);
477 @ma = ($m1 ... 2);
478 @ma = (1   ... $u);
479 @ma = (1   ... $m2);
480
481 $v = (1   .. 2);
482 $v = ($t  .. 2);
483 $v = ($m1 .. 2);
484 $v = (1   .. $u);
485 $v = (1   .. $m2);
486
487 $v = (1   ... 2);
488 $v = ($t  ... 2);
489 $v = ($m1 ... 2);
490 $v = (1   ... $u);
491 $v = (1   ... $m2);
492 EXPECT
493 Use of uninitialized value $m1 in range (or flop) at - line 10.
494 Use of uninitialized value $m2 in range (or flop) at - line 12.
495 Use of uninitialized value $m1 in range (or flop) at - line 16.
496 Use of uninitialized value $m2 in range (or flop) at - line 18.
497 Use of uninitialized value $. in range (or flip) at - line 20.
498 Use of uninitialized value $. in range (or flop) at - line 21.
499 Use of uninitialized value $. in range (or flip) at - line 23.
500 Use of uninitialized value $. in range (or flip) at - line 24.
501 Use of uninitialized value $. in range (or flip) at - line 26.
502 Use of uninitialized value $. in range (or flip) at - line 29.
503 Use of uninitialized value $. in range (or flip) at - line 30.
504 ########
505 use warnings 'uninitialized';
506 my ($m1, $m2);
507 my ($v, @a);
508 my ($t, $u) = (1, 1);
509
510 @ma = ($t  .. $u);
511 @ma = ($m1 .. $u);
512 @ma = ($t  .. $m2);
513 @ma = ($m1 .. $m2);
514
515 @ma = ($t  ... $u);
516 @ma = ($m1 ... $u);
517 @ma = ($t  ... $m2);
518 @ma = ($m1 ... $m2);
519
520 $v = ($t  .. $u);
521 $v = ($m1 .. $u);
522 $v = ($t  .. $m2);
523 $v = ($m1 .. $m2);
524
525 $v = ($t  ... $u);
526 $v = ($m1 ... $u);
527 $v = ($t  ... $m2);
528 $v = ($m1 ... $m2);
529 EXPECT
530 Use of uninitialized value $m1 in range (or flop) at - line 7.
531 Use of uninitialized value $m2 in range (or flop) at - line 8.
532 Use of uninitialized value $m1 in range (or flop) at - line 9.
533 Use of uninitialized value $m2 in range (or flop) at - line 9.
534 Use of uninitialized value $m1 in range (or flop) at - line 12.
535 Use of uninitialized value $m2 in range (or flop) at - line 13.
536 Use of uninitialized value $m1 in range (or flop) at - line 14.
537 Use of uninitialized value $m2 in range (or flop) at - line 14.
538 ########
539 use warnings 'uninitialized';
540 my ($m1, $v);
541 our ($g1);
542
543 my ($x1,$x2);
544 $v = $x1 << $m1;
545 $v = $x2 << $g1;
546 EXPECT
547 Use of uninitialized value $m1 in left bitshift (<<) at - line 6.
548 Use of uninitialized value $x1 in left bitshift (<<) at - line 6.
549 Use of uninitialized value $g1 in left bitshift (<<) at - line 7.
550 Use of uninitialized value $x2 in left bitshift (<<) at - line 7.
551 ########
552 use warnings 'uninitialized';
553 my ($m1, $m2, $v);
554 our ($g1, $g2);
555
556 use integer;
557 $v = $m1 + $g1;
558 $v = $m1 - $g1;
559 $v = $m1 * $g1;
560 eval {$v = $m1 / $g1};
561 $v = $m2 / 2;
562 eval {$v = $m1 % $g1};
563 $v = $m2 % 2;
564 $v = $m1 < $g1;
565 $v = $m1 > $g1;
566 $v = $m1 <= $g1;
567 $v = $m1 >= $g1;
568 $v = $m1 == $g1;
569 $v = $m1 != $g1;
570 $v = $m1 <=> $g1;
571 $v = -$m1;
572 EXPECT
573 Use of uninitialized value $g1 in integer addition (+) at - line 6.
574 Use of uninitialized value $m1 in integer addition (+) at - line 6.
575 Use of uninitialized value $g1 in integer subtraction (-) at - line 7.
576 Use of uninitialized value $m1 in integer subtraction (-) at - line 7.
577 Use of uninitialized value $g1 in integer multiplication (*) at - line 8.
578 Use of uninitialized value $m1 in integer multiplication (*) at - line 8.
579 Use of uninitialized value $g1 in integer division (/) at - line 9.
580 Use of uninitialized value $m2 in integer division (/) at - line 10.
581 Use of uninitialized value $g1 in integer modulus (%) at - line 11.
582 Use of uninitialized value $m1 in integer modulus (%) at - line 11.
583 Use of uninitialized value $m2 in integer modulus (%) at - line 12.
584 Use of uninitialized value $g1 in integer lt (<) at - line 13.
585 Use of uninitialized value $m1 in integer lt (<) at - line 13.
586 Use of uninitialized value $g1 in integer gt (>) at - line 14.
587 Use of uninitialized value $m1 in integer gt (>) at - line 14.
588 Use of uninitialized value $g1 in integer le (<=) at - line 15.
589 Use of uninitialized value $m1 in integer le (<=) at - line 15.
590 Use of uninitialized value $g1 in integer ge (>=) at - line 16.
591 Use of uninitialized value $m1 in integer ge (>=) at - line 16.
592 Use of uninitialized value $g1 in integer eq (==) at - line 17.
593 Use of uninitialized value $m1 in integer eq (==) at - line 17.
594 Use of uninitialized value $g1 in integer ne (!=) at - line 18.
595 Use of uninitialized value $m1 in integer ne (!=) at - line 18.
596 Use of uninitialized value $g1 in integer comparison (<=>) at - line 19.
597 Use of uninitialized value $m1 in integer comparison (<=>) at - line 19.
598 Use of uninitialized value $m1 in integer negation (-) at - line 20.
599 ########
600 use warnings 'uninitialized';
601 my ($m1, $m2, $v);
602 our ($g1, $g2);
603
604 $v = int($g1);
605 $v = abs($g2);
606 EXPECT
607 Use of uninitialized value $g1 in int at - line 5.
608 Use of uninitialized value $g2 in abs at - line 6.
609 ########
610 use warnings 'uninitialized';
611 my ($m1, $m2, $v);
612 our ($g1);
613
614 $v = pack $m1;
615 $v = pack "i*", $m2, $g1, $g2;
616 my @unpack = unpack $m1, $m2;
617 EXPECT
618 Use of uninitialized value $m1 in pack at - line 5.
619 Use of uninitialized value $m2 in pack at - line 6.
620 Use of uninitialized value $g1 in pack at - line 6.
621 Use of uninitialized value $g2 in pack at - line 6.
622 Use of uninitialized value $m1 in unpack at - line 7.
623 Use of uninitialized value $m2 in unpack at - line 7.
624 ########
625 use warnings 'uninitialized';
626 my ($m1);
627 our ($g1);
628
629 my @sort;
630 @sort = sort $m1, $g1;
631 @sort = sort {$a <=> $b} $m1, $g1;
632 sub sortf {$a-1 <=> $b-1};
633 @sort = sort  &sortf, $m1, $g1;
634 @sort = sort { undef } 1, 2;
635 sub frobnicate($$) { undef }
636 @sort = sort frobnicate 1, 2;
637 @sort = sort pyfg 1, 2;
638 @sort = sort pyfgc 1, 2;
639 no warnings;
640 sub pyfg { undef }
641 sub pyfgc($$) { undef }
642 use warnings;
643 sub dog {}
644 sub dogwood($$) {}
645 @sort = sort dog     1,2;
646 @sort = sort dogwood 1,2;
647 EXPECT
648 Use of uninitialized value $m1 in sort at - line 6.
649 Use of uninitialized value $g1 in sort at - line 6.
650 Use of uninitialized value $m1 in sort at - line 6.
651 Use of uninitialized value $g1 in sort at - line 6.
652 Use of uninitialized value $m1 in sort at - line 7.
653 Use of uninitialized value $g1 in sort at - line 7.
654 Use of uninitialized value $g1 in sort at - line 7.
655 Use of uninitialized value $m1 in sort at - line 7.
656 Use of uninitialized value $a in subtraction (-) at - line 8.
657 Use of uninitialized value $b in subtraction (-) at - line 8.
658 Use of uninitialized value $m1 in sort at - line 9.
659 Use of uninitialized value $g1 in sort at - line 9.
660 Use of uninitialized value $m1 in sort at - line 9.
661 Use of uninitialized value $m1 in sort at - line 9.
662 Use of uninitialized value $g1 in sort at - line 9.
663 Use of uninitialized value $g1 in sort at - line 9.
664 Use of uninitialized value in sort at - line 10.
665 Use of uninitialized value in sort at - line 12.
666 Use of uninitialized value in sort at - line 13.
667 Use of uninitialized value in sort at - line 14.
668 Use of uninitialized value in sort at - line 21.
669 Use of uninitialized value in sort at - line 22.
670 ########
671 use Config;
672 unless ($Config{d_double_has_inf} && $Config{d_double_has_nan}) {
673     print <<EOM ;
674 SKIPPED
675 # No inf/nan support
676 EOM
677     exit ;
678 }
679 my $nan = eval 'sin 9**9**9';
680 if ($nan == $nan) {
681     print <<EOM ;
682 SKIPPED
683 # No nan support
684 EOM
685     exit ;
686 }
687 use warnings 'uninitialized';
688 # The optimised {$a<=>$b} case should behave the same way as unoptimised.
689 @sort = sort { ($a)[0] <=> $b } 1, $nan;
690 @sort = sort {  $a     <=> $b } 1, $nan;
691 EXPECT
692 Use of uninitialized value in sort at - line 19.
693 Use of uninitialized value in sort at - line 20.
694 ########
695 use warnings 'uninitialized';
696 my ($m1, $m2, $v);
697 our ($g1);
698
699 eval { $v = $m1 / $g1 };
700 $v = $m2 / 2;
701 eval { $v = $m1 % $g1 };
702 $v = $m2 % 2;
703 $v = $m1 == $g1;
704 $v = $m1 >= $g1;
705 $v = $m1 >  $g1;
706 $v = $m1 <= $g1;
707 $v = $m1 <  $g1;
708 $v = $m1 *  $g1;
709 $v = $m1 <=>$g1;
710 $v = $m1 != $g1;
711 $v = $m1   -$g1;
712 $v = $m1 ** $g1;
713 $v = $m1 +  $g1;
714 $v = $m1 -  $g1;
715 EXPECT
716 Use of uninitialized value $g1 in division (/) at - line 5.
717 Use of uninitialized value $m1 in division (/) at - line 5.
718 Use of uninitialized value $m2 in division (/) at - line 6.
719 Use of uninitialized value $g1 in modulus (%) at - line 7.
720 Use of uninitialized value $m1 in modulus (%) at - line 7.
721 Use of uninitialized value $m2 in modulus (%) at - line 8.
722 Use of uninitialized value $g1 in numeric eq (==) at - line 9.
723 Use of uninitialized value $m1 in numeric eq (==) at - line 9.
724 Use of uninitialized value $g1 in numeric ge (>=) at - line 10.
725 Use of uninitialized value $m1 in numeric ge (>=) at - line 10.
726 Use of uninitialized value $g1 in numeric gt (>) at - line 11.
727 Use of uninitialized value $m1 in numeric gt (>) at - line 11.
728 Use of uninitialized value $g1 in numeric le (<=) at - line 12.
729 Use of uninitialized value $m1 in numeric le (<=) at - line 12.
730 Use of uninitialized value $g1 in numeric lt (<) at - line 13.
731 Use of uninitialized value $m1 in numeric lt (<) at - line 13.
732 Use of uninitialized value $g1 in multiplication (*) at - line 14.
733 Use of uninitialized value $m1 in multiplication (*) at - line 14.
734 Use of uninitialized value $g1 in numeric comparison (<=>) at - line 15.
735 Use of uninitialized value $m1 in numeric comparison (<=>) at - line 15.
736 Use of uninitialized value $g1 in numeric ne (!=) at - line 16.
737 Use of uninitialized value $m1 in numeric ne (!=) at - line 16.
738 Use of uninitialized value $g1 in subtraction (-) at - line 17.
739 Use of uninitialized value $m1 in subtraction (-) at - line 17.
740 Use of uninitialized value $g1 in exponentiation (**) at - line 18.
741 Use of uninitialized value $m1 in exponentiation (**) at - line 18.
742 Use of uninitialized value $g1 in addition (+) at - line 19.
743 Use of uninitialized value $m1 in addition (+) at - line 19.
744 Use of uninitialized value $g1 in subtraction (-) at - line 20.
745 Use of uninitialized value $m1 in subtraction (-) at - line 20.
746 ########
747 use warnings 'uninitialized';
748 sub TIESCALAR{bless[]}
749 sub FETCH { undef }
750
751 tie my $m1, "";
752 my $v;
753 $v = $m1 + $m1;
754 $v = $m1 - $m1;
755 no warnings;
756 $v = $m1 + $m1;
757 $v = $m1 - $m1;
758 EXPECT
759 Use of uninitialized value $m1 in addition (+) at - line 7.
760 Use of uninitialized value $m1 in addition (+) at - line 7.
761 Use of uninitialized value $m1 in subtraction (-) at - line 8.
762 Use of uninitialized value $m1 in subtraction (-) at - line 8.
763 ########
764 use warnings 'uninitialized';
765 my ($m1, $v);
766 our ($g1);
767
768 $v = *global1{$m1};
769 $v = prototype $g1;
770 $v = bless [], $g1;
771 $v = `$m1`;
772
773 $v = $m1 . $g1;
774 EXPECT
775 Use of uninitialized value $m1 in glob elem at - line 5.
776 Use of uninitialized value $g1 in subroutine prototype at - line 6.
777 Use of uninitialized value $g1 in bless at - line 7.
778 Use of uninitialized value $m1 in quoted execution (``, qx) at - line 8.
779 Use of uninitialized value $m1 in concatenation (.) or string at - line 10.
780 Use of uninitialized value $g1 in concatenation (.) or string at - line 10.
781 ########
782 use warnings 'uninitialized';
783 my ($m1);
784 our ($g1, $g2);
785
786 /y/;
787 /$m1/;
788 /$g1/;
789
790 s/y/z/;         undef $_;
791 s/$m1/z/;       undef $_;
792 s//$g1/;        undef $_;
793 s/$m1/$g1/;     undef $_;
794 tr/x/y/;        undef $_;
795 tr/x/y/r;       undef $_;
796
797 $g2 =~ /y/;
798 $g2 =~ /$m1/;
799 $g2 =~ /$g1/;
800 $g2 =~ s/y/z/;          undef $g2;
801 $g2 =~ s/$m1/z/;        undef $g2;
802 $g2 =~ s//$g1/;         undef $g2;
803 $g2 =~ s/$m1/$g1/;      undef $g2;
804 $g2 =~ tr/x/y/;         undef $g2; # XXX can't extract var name yet
805 $g2 =~ tr/x/y/r;        undef $g2; # XXX can't extract var name yet
806
807 my $foo = "abc";
808 $foo =~ /$m1/;
809 $foo =~ /$g1/;
810 $foo =~ s/y/z/;
811 $foo =~ s/$m1/z/;
812 $foo =~ s//$g1/;
813 $foo =~ s/$m1/$g1/;
814 $foo =~ s/./$m1/e;
815 undef $g1;
816 $m1 = '$g1';
817 $foo =~ s//$m1/ee;
818 undef $m1;
819 $m1 =~ tr/x/y/;         undef $m1;
820 $m1 =~ tr/x/y/r;
821 EXPECT
822 Use of uninitialized value $_ in pattern match (m//) at - line 5.
823 Use of uninitialized value $m1 in regexp compilation at - line 6.
824 Use of uninitialized value $_ in pattern match (m//) at - line 6.
825 Use of uninitialized value $g1 in regexp compilation at - line 7.
826 Use of uninitialized value $_ in pattern match (m//) at - line 7.
827 Use of uninitialized value $_ in substitution (s///) at - line 9.
828 Use of uninitialized value $m1 in regexp compilation at - line 10.
829 Use of uninitialized value $_ in substitution (s///) at - line 10.
830 Use of uninitialized value $_ in substitution (s///) at - line 10.
831 Use of uninitialized value $_ in substitution (s///) at - line 11.
832 Use of uninitialized value $_ in substitution (s///) at - line 11.
833 Use of uninitialized value $g1 in substitution iterator at - line 11.
834 Use of uninitialized value $m1 in regexp compilation at - line 12.
835 Use of uninitialized value $_ in substitution (s///) at - line 12.
836 Use of uninitialized value $_ in substitution (s///) at - line 12.
837 Use of uninitialized value $g1 in substitution iterator at - line 12.
838 Use of uninitialized value $_ in transliteration (tr///) at - line 13.
839 Use of uninitialized value $_ in transliteration (tr///) at - line 14.
840 Use of uninitialized value $g2 in pattern match (m//) at - line 16.
841 Use of uninitialized value $m1 in regexp compilation at - line 17.
842 Use of uninitialized value $g2 in pattern match (m//) at - line 17.
843 Use of uninitialized value $g1 in regexp compilation at - line 18.
844 Use of uninitialized value $g2 in pattern match (m//) at - line 18.
845 Use of uninitialized value $g2 in substitution (s///) at - line 19.
846 Use of uninitialized value $m1 in regexp compilation at - line 20.
847 Use of uninitialized value $g2 in substitution (s///) at - line 20.
848 Use of uninitialized value $g2 in substitution (s///) at - line 20.
849 Use of uninitialized value $g2 in substitution (s///) at - line 21.
850 Use of uninitialized value $g2 in substitution (s///) at - line 21.
851 Use of uninitialized value $g1 in substitution iterator at - line 21.
852 Use of uninitialized value $m1 in regexp compilation at - line 22.
853 Use of uninitialized value $g2 in substitution (s///) at - line 22.
854 Use of uninitialized value $g2 in substitution (s///) at - line 22.
855 Use of uninitialized value $g1 in substitution iterator at - line 22.
856 Use of uninitialized value in transliteration (tr///) at - line 23.
857 Use of uninitialized value in transliteration (tr///) at - line 24.
858 Use of uninitialized value $m1 in regexp compilation at - line 27.
859 Use of uninitialized value $g1 in regexp compilation at - line 28.
860 Use of uninitialized value $m1 in regexp compilation at - line 30.
861 Use of uninitialized value $g1 in substitution iterator at - line 31.
862 Use of uninitialized value $m1 in regexp compilation at - line 32.
863 Use of uninitialized value $g1 in substitution iterator at - line 32.
864 Use of uninitialized value $m1 in substitution (s///) at - line 33.
865 Use of uninitialized value in substitution iterator at - line 36.
866 Use of uninitialized value $m1 in transliteration (tr///) at - line 38.
867 Use of uninitialized value $m1 in transliteration (tr///) at - line 39.
868 ########
869 use warnings 'uninitialized';
870 my ($m1);
871
872 { my $foo = "abc"; (substr($foo,0,0)) = ($m1) }
873 EXPECT
874 Use of uninitialized value $m1 in list assignment at - line 4.
875 ########
876 use warnings 'uninitialized';
877 our ($g1);
878
879 study;
880 study $g1;
881 EXPECT
882 Use of uninitialized value $_ in study at - line 4.
883 Use of uninitialized value $g1 in study at - line 5.
884 ########
885 use warnings 'uninitialized';
886 my ($m1);
887
888 pos()=0;
889 pos($m1)=0;
890 EXPECT
891 Use of uninitialized value $_ in scalar assignment at - line 4.
892 Use of uninitialized value $m1 in scalar assignment at - line 5.
893 ########
894 use warnings 'uninitialized';
895 my ($m1);
896 our ($g1);
897
898 $v = pos($m1) + 1;
899 $v = pos($g1) + 1;
900 $m1 = 0;
901 $g1 = "";
902 $v = pos($m1) + 1;
903 $v = pos($g1) + 1;
904 EXPECT
905 Use of uninitialized value in addition (+) at - line 5.
906 Use of uninitialized value in addition (+) at - line 6.
907 Use of uninitialized value in addition (+) at - line 9.
908 Use of uninitialized value in addition (+) at - line 10.
909 ########
910 use warnings 'uninitialized';
911 my ($m1);
912
913 { my $x = "a" x $m1 }           # NB LHS of repeat does not warn
914 { my @x = ("a") x $m1 }
915 EXPECT
916 Use of uninitialized value $m1 in repeat (x) at - line 4.
917 Use of uninitialized value $m1 in repeat (x) at - line 5.
918 ########
919 use warnings 'uninitialized';
920 my ($m1, $v);
921 our ($g1);
922
923 $v = "$m1";
924
925 $v = $m1 lt $g1;
926 $v = $m1 le $g1;
927 $v = $m1 gt $g1;
928 $v = $m1 ge $g1;
929 $v = $m1 eq $g1;
930 $v = $m1 ne $g1;
931 $v = $m1 cmp $g1;
932 EXPECT
933 Use of uninitialized value $m1 in string at - line 5.
934 Use of uninitialized value $m1 in string lt at - line 7.
935 Use of uninitialized value $g1 in string lt at - line 7.
936 Use of uninitialized value $m1 in string le at - line 8.
937 Use of uninitialized value $g1 in string le at - line 8.
938 Use of uninitialized value $m1 in string gt at - line 9.
939 Use of uninitialized value $g1 in string gt at - line 9.
940 Use of uninitialized value $m1 in string ge at - line 10.
941 Use of uninitialized value $g1 in string ge at - line 10.
942 Use of uninitialized value $m1 in string eq at - line 11.
943 Use of uninitialized value $g1 in string eq at - line 11.
944 Use of uninitialized value $m1 in string ne at - line 12.
945 Use of uninitialized value $g1 in string ne at - line 12.
946 Use of uninitialized value $m1 in string comparison (cmp) at - line 13.
947 Use of uninitialized value $g1 in string comparison (cmp) at - line 13.
948 ########
949 use warnings 'uninitialized';
950 my ($m1, $v);
951 our ($g1);
952
953 $v = atan2($m1,$g1);
954 $v = sin $m1;
955 $v = cos $m1;
956 $v = rand $m1;
957 $v = srand $m1;
958 $v = exp $m1;
959 $v = eval {log $m1};
960 $v = sqrt $m1;
961 $v = hex $m1;
962 $v = oct $m1;
963 $v = oct;
964 $v = length; # does not warn
965 EXPECT
966 Use of uninitialized value $g1 in atan2 at - line 5.
967 Use of uninitialized value $m1 in atan2 at - line 5.
968 Use of uninitialized value $m1 in sin at - line 6.
969 Use of uninitialized value $m1 in cos at - line 7.
970 Use of uninitialized value $m1 in rand at - line 8.
971 Use of uninitialized value $m1 in srand at - line 9.
972 Use of uninitialized value $m1 in exp at - line 10.
973 Use of uninitialized value $m1 in log at - line 11.
974 Use of uninitialized value $m1 in sqrt at - line 12.
975 Use of uninitialized value $m1 in hex at - line 13.
976 Use of uninitialized value $m1 in oct at - line 14.
977 Use of uninitialized value $_ in oct at - line 15.
978 ########
979 use warnings 'uninitialized';
980 my ($m1, $v);
981 our ($g1);
982
983 $v = substr $m1, $g1;
984 $v = substr $m1, $g1, $m2;
985 $v = substr $m1, $g1, $m2, $g2; undef $m1;
986 substr($m1, $g1) = $g2;         undef $m1; # NB global2
987 substr($m1, $g1, $m2) = $g2;    undef $m1; # isn't identified
988
989 $v = eval {vec ($m1, $g1, $m2)};
990 eval {vec ($m1, $g1, $m2) = $g2};       undef $m1; # ditto
991
992 $v = index  $m1, $m2;
993 $v = index  $m1, $m2, $g1;
994 $v = rindex $m1, $m2;
995 $v = rindex $m1, $m2, $g1;
996 EXPECT
997 Use of uninitialized value $g1 in substr at - line 5.
998 Use of uninitialized value $m1 in substr at - line 5.
999 Use of uninitialized value $m2 in substr at - line 6.
1000 Use of uninitialized value $g1 in substr at - line 6.
1001 Use of uninitialized value $m1 in substr at - line 6.
1002 Use of uninitialized value $m2 in substr at - line 7.
1003 Use of uninitialized value $g1 in substr at - line 7.
1004 Use of uninitialized value $g2 in substr at - line 7.
1005 Use of uninitialized value $m1 in substr at - line 7.
1006 Use of uninitialized value $g1 in substr at - line 8.
1007 Use of uninitialized value $g2 in substr at - line 8.
1008 Use of uninitialized value $m1 in substr at - line 8.
1009 Use of uninitialized value $m2 in substr at - line 9.
1010 Use of uninitialized value $g1 in substr at - line 9.
1011 Use of uninitialized value $g2 in substr at - line 9.
1012 Use of uninitialized value $m1 in substr at - line 9.
1013 Use of uninitialized value $m2 in vec at - line 11.
1014 Use of uninitialized value $g1 in vec at - line 11.
1015 Use of uninitialized value $m1 in vec at - line 11.
1016 Use of uninitialized value $m2 in vec at - line 12.
1017 Use of uninitialized value $g1 in vec at - line 12.
1018 Use of uninitialized value $m1 in index at - line 14.
1019 Use of uninitialized value $m2 in index at - line 14.
1020 Use of uninitialized value $g1 in index at - line 15.
1021 Use of uninitialized value $m1 in index at - line 15.
1022 Use of uninitialized value $m2 in index at - line 15.
1023 Use of uninitialized value $m1 in rindex at - line 16.
1024 Use of uninitialized value $m2 in rindex at - line 16.
1025 Use of uninitialized value $g1 in rindex at - line 17.
1026 Use of uninitialized value $m1 in rindex at - line 17.
1027 Use of uninitialized value $m2 in rindex at - line 17.
1028 ########
1029 use warnings 'uninitialized';
1030 my ($m1, $v);
1031 our ($g1);
1032
1033 $v = sprintf $m1;
1034 $v = sprintf '%d%d%d%d', $m1, $m2, $g1, $g2;
1035 my $m3; eval {formline $m3 };
1036 formline '@<<@<<@<<@<<', $m1, $m2, $g1, $g2;
1037 EXPECT
1038 Use of uninitialized value $m1 in sprintf at - line 5.
1039 Use of uninitialized value $m1 in sprintf at - line 6.
1040 Use of uninitialized value $m2 in sprintf at - line 6.
1041 Use of uninitialized value $g1 in sprintf at - line 6.
1042 Use of uninitialized value $g2 in sprintf at - line 6.
1043 Use of uninitialized value $m3 in formline at - line 7.
1044 Use of uninitialized value $m1 in formline at - line 8.
1045 Use of uninitialized value $m2 in formline at - line 8.
1046 Use of uninitialized value $g1 in formline at - line 8.
1047 Use of uninitialized value $g2 in formline at - line 8.
1048 ########
1049 # SKIP ? !$Config{d_crypt}
1050 use warnings 'uninitialized';
1051 my ($m1, $v);
1052 our ($g1);
1053
1054 $v = crypt $m1, $g1;
1055
1056 $v = ord;
1057 $v = ord $m1;
1058 $v = chr;
1059 $v = chr $m1;
1060
1061 $v = ucfirst;
1062 $v = ucfirst $m1;
1063 $v = lcfirst;
1064 $v = lcfirst $m1;
1065 $v = uc;
1066 $v = uc $m1;
1067 $v = lc;
1068 $v = lc $m1;
1069
1070 $v = quotemeta;
1071 $v = quotemeta $m1;
1072 EXPECT
1073 Use of uninitialized value $m1 in crypt at - line 5.
1074 Use of uninitialized value $g1 in crypt at - line 5.
1075 Use of uninitialized value $_ in ord at - line 7.
1076 Use of uninitialized value $m1 in ord at - line 8.
1077 Use of uninitialized value $_ in chr at - line 9.
1078 Use of uninitialized value $m1 in chr at - line 10.
1079 Use of uninitialized value $_ in ucfirst at - line 12.
1080 Use of uninitialized value $m1 in ucfirst at - line 13.
1081 Use of uninitialized value $_ in lcfirst at - line 14.
1082 Use of uninitialized value $m1 in lcfirst at - line 15.
1083 Use of uninitialized value $_ in uc at - line 16.
1084 Use of uninitialized value $m1 in uc at - line 17.
1085 Use of uninitialized value $_ in lc at - line 18.
1086 Use of uninitialized value $m1 in lc at - line 19.
1087 Use of uninitialized value $_ in quotemeta at - line 21.
1088 Use of uninitialized value $m1 in quotemeta at - line 22.
1089 ########
1090 use warnings 'uninitialized';
1091 my ($m1, $v1, $v2, $v3, $v4);
1092 our ($g1);
1093
1094 ($v1,$v2,$v3,$v4) = split;
1095 ($v1,$v2,$v3,$v4) = split $m1;
1096 ($v1,$v2,$v3,$v4) = split $m1, $m2;
1097 ($v1,$v2,$v3,$v4) = split $m1, $m2, $g1;
1098
1099 $v1 = join $m1;
1100 $v2 = join $m1, $m2;
1101 $v3 = join $m1, $m2, $m3;
1102 EXPECT
1103 Use of uninitialized value $_ in split at - line 5.
1104 Use of uninitialized value $m1 in regexp compilation at - line 6.
1105 Use of uninitialized value $_ in split at - line 6.
1106 Use of uninitialized value $m1 in regexp compilation at - line 7.
1107 Use of uninitialized value $m2 in split at - line 7.
1108 Use of uninitialized value $m1 in regexp compilation at - line 8.
1109 Use of uninitialized value $g1 in split at - line 8.
1110 Use of uninitialized value $m2 in split at - line 8.
1111 Use of uninitialized value $m1 in join or string at - line 10.
1112 Use of uninitialized value $m2 in join or string at - line 11.
1113 Use of uninitialized value $m1 in join or string at - line 12.
1114 Use of uninitialized value $m2 in join or string at - line 12.
1115 Use of uninitialized value $m3 in join or string at - line 12.
1116 ########
1117 use warnings 'uninitialized';
1118 my ($m1, $m2, @ma, $v);
1119
1120 our @foo1=(1,undef); chomp @foo1;
1121 my  @foo2=(1,undef); chomp @foo2;
1122 our @foo3=(1,undef); chop  @foo3;
1123 my  @foo4=(1,undef); chop  @foo4;
1124 our @foo5=(1,undef); $v = sprintf "%s%s",@foo5;
1125 my  @foo6=(1,undef); $v = sprintf "%s%s",@foo6;
1126 our %foo7=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s%s%s",%foo7;
1127 my  %foo8=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s%s%s",%foo8;
1128 our @foo9 =(1,undef); $v = sprintf "%s%s%s%s",$m1,@foo9, $ma[2];
1129 my  @foo10=(1,undef); $v = sprintf "%s%s%s%s",$m2,@foo10,$ma[2];
1130 our %foo11=('foo'=>'bar','baz'=>undef); $v = join '', %foo11;
1131 my  %foo12=('foo'=>'bar','baz'=>undef); $v = join '', %foo12;
1132 our %foo13=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo13;
1133 my  %foo14=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo14;
1134 EXPECT
1135 Use of uninitialized value $foo1[1] in chomp at - line 4.
1136 Use of uninitialized value $foo2[1] in chomp at - line 5.
1137 Use of uninitialized value $foo3[1] in chop at - line 6.
1138 Use of uninitialized value $foo4[1] in chop at - line 7.
1139 Use of uninitialized value $foo5[1] in sprintf at - line 8.
1140 Use of uninitialized value $foo6[1] in sprintf at - line 9.
1141 Use of uninitialized value $foo7{"baz"} in sprintf at - line 10.
1142 Use of uninitialized value $foo8{"baz"} in sprintf at - line 11.
1143 Use of uninitialized value $m1 in sprintf at - line 12.
1144 Use of uninitialized value $foo9[1] in sprintf at - line 12.
1145 Use of uninitialized value in sprintf at - line 12.
1146 Use of uninitialized value $m2 in sprintf at - line 13.
1147 Use of uninitialized value $foo10[1] in sprintf at - line 13.
1148 Use of uninitialized value in sprintf at - line 13.
1149 Use of uninitialized value $foo11{"baz"} in join or string at - line 14.
1150 Use of uninitialized value $foo12{"baz"} in join or string at - line 15.
1151 Use of uninitialized value within %foo13 in join or string at - line 16.
1152 Use of uninitialized value within %foo14 in join or string at - line 17.
1153 ########
1154 use warnings 'uninitialized';
1155 my ($v);
1156
1157 undef $^A; $v = $^A + ${^FOO}; # should output '^A' not chr(1)
1158 *GLOB1 = *GLOB2;
1159 $v = $GLOB1 + 1;
1160 $v = $GLOB2 + 1;
1161 EXPECT
1162 Use of uninitialized value $^FOO in addition (+) at - line 4.
1163 Use of uninitialized value $^A in addition (+) at - line 4.
1164 Use of uninitialized value $GLOB1 in addition (+) at - line 6.
1165 Use of uninitialized value $GLOB2 in addition (+) at - line 7.
1166 ########
1167 use warnings 'uninitialized';
1168 my ($v);
1169
1170 # check hash key is sanitised
1171 my %h = ("\0011\002\r\n\t\f\"\\\x{1234}abcdefghijklmnopqrstuvwxyz", undef);
1172 $v = join '', %h;
1173 EXPECT
1174 Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\\x{1234}abcde"...} in join or string at - line 6.
1175 ########
1176 use warnings 'uninitialized';
1177 my ($m1, $v);
1178 our ($g1);
1179
1180 $v = eval { \&$m1 };
1181 $v = eval { \&$g1 };
1182
1183 my @a;
1184 @a = splice @a, $m1, $g1;
1185 $v = 1 + splice @a, $m1, $g1;
1186
1187 my $x = bless [], 'Z';
1188 eval { $x->$m1() };
1189
1190 eval { &$m1() };
1191 eval { &$g1() };
1192
1193 warn $m1,$g1,"foo";
1194
1195 eval { die $m1, $g1 };
1196
1197 reset $m1;
1198 reset $g1;
1199 EXPECT
1200 Use of uninitialized value $m1 in subroutine dereference at - line 5.
1201 Use of uninitialized value $g1 in subroutine dereference at - line 6.
1202 Use of uninitialized value $m1 in splice at - line 9.
1203 Use of uninitialized value $g1 in splice at - line 9.
1204 Use of uninitialized value $m1 in splice at - line 10.
1205 Use of uninitialized value $g1 in splice at - line 10.
1206 Use of uninitialized value in addition (+) at - line 10.
1207 Use of uninitialized value $m1 in method lookup at - line 13.
1208 Use of uninitialized value $m1 in warn at - line 18.
1209 Use of uninitialized value $g1 in warn at - line 18.
1210 foo at - line 18.
1211 Use of uninitialized value $m1 in die at - line 20.
1212 Use of uninitialized value $g1 in die at - line 20.
1213 Use of uninitialized value $m1 in symbol reset at - line 22.
1214 Use of uninitialized value $g1 in symbol reset at - line 23.
1215 ########
1216 use warnings 'uninitialized';
1217 my ($m1);
1218 our ($g1);
1219
1220 open FOO;               # accesses $FOO
1221 my $foo = 'FO';
1222 open($foo."O"); # accesses $FOO
1223 open my $x;             # accesses ${*$x}
1224 open $foobar;   # accesses ${*$foobar}
1225 my $y;
1226 open $y, $m1;
1227 eval { open $y, $m1, $g1 };
1228 open $y, '<', $g1;
1229
1230 sysopen $y, $m1, $m2;
1231 sysopen $y, $m1, $g1, $m2;
1232
1233 my $old = umask;
1234 umask $m1;
1235 umask $g1;
1236 umask $old;
1237
1238 binmode STDIN, $m1;
1239 EXPECT
1240 Use of uninitialized value $FOO in open at - line 5.
1241 Use of uninitialized value in open at - line 7.
1242 Use of uninitialized value in open at - line 8.
1243 Use of uninitialized value in open at - line 9.
1244 Use of uninitialized value $m1 in open at - line 11.
1245 Use of uninitialized value $m1 in open at - line 12.
1246 Use of uninitialized value $g1 in open at - line 13.
1247 Use of uninitialized value $m2 in sysopen at - line 15.
1248 Use of uninitialized value $m1 in sysopen at - line 15.
1249 Use of uninitialized value $m2 in sysopen at - line 16.
1250 Use of uninitialized value $g1 in sysopen at - line 16.
1251 Use of uninitialized value $m1 in sysopen at - line 16.
1252 Use of uninitialized value $m1 in umask at - line 19.
1253 Use of uninitialized value $g1 in umask at - line 20.
1254 Use of uninitialized value $m1 in binmode at - line 23.
1255 ########
1256 use warnings 'uninitialized';
1257 my ($m1);
1258 our ($g1);
1259
1260 eval { my $x; tie $x, $m1 };
1261
1262 eval { my $x; read    $m1, $x, $g1 };
1263 eval { my $x; read    $m1, $x, $g1, $g2 };
1264 eval { my $x; sysread $m1, $x, $g1 };
1265 eval { my $x; sysread $m1, $x, $g1, $g2 };
1266 EXPECT
1267 Use of uninitialized value $m1 in tie at - line 5.
1268 Use of uninitialized value $m1 in ref-to-glob cast at - line 7.
1269 Use of uninitialized value $g1 in read at - line 7.
1270 Use of uninitialized value $m1 in ref-to-glob cast at - line 8.
1271 Use of uninitialized value $g1 in read at - line 8.
1272 Use of uninitialized value $g2 in read at - line 8.
1273 Use of uninitialized value $m1 in ref-to-glob cast at - line 9.
1274 Use of uninitialized value $g1 in sysread at - line 9.
1275 Use of uninitialized value $m1 in ref-to-glob cast at - line 10.
1276 Use of uninitialized value $g1 in sysread at - line 10.
1277 Use of uninitialized value $g2 in sysread at - line 10.
1278 ########
1279 use warnings 'uninitialized';
1280 my ($m1);
1281 our ($g1, @ga);
1282
1283 printf $m1;
1284 printf STDERR "%d%d%d%d\n", $m1, $m2, $g1, $g2;
1285 printf $ga[1000];
1286 printf STDERR "FOO1:%s\n", $ga[1000];
1287 printf STDERR "FOO2:%s%s%s%s\n", $m1, $g1, $ga[1],$m2;
1288 printf STDERR "FOO3:%s%s%s\n", "X", $ga[1],"Y";
1289 EXPECT
1290 Use of uninitialized value $m1 in printf at - line 5.
1291 Use of uninitialized value $m1 in printf at - line 6.
1292 Use of uninitialized value $m2 in printf at - line 6.
1293 Use of uninitialized value $g1 in printf at - line 6.
1294 Use of uninitialized value $g2 in printf at - line 6.
1295 0000
1296 Use of uninitialized value in printf at - line 7.
1297 Use of uninitialized value in printf at - line 8.
1298 FOO1:
1299 Use of uninitialized value $m1 in printf at - line 9.
1300 Use of uninitialized value $g1 in printf at - line 9.
1301 Use of uninitialized value in printf at - line 9.
1302 Use of uninitialized value $m2 in printf at - line 9.
1303 FOO2:
1304 Use of uninitialized value in printf at - line 10.
1305 FOO3:XY
1306 ########
1307 use warnings 'uninitialized';
1308 my ($m1);
1309 our ($g1);
1310
1311 eval { my $x; seek    $x,$m1, $g1 };
1312 eval { my $x; sysseek $x,$m1, $g1 };
1313 eval { syswrite $m1, $g1 }; # logic changed - now won't try $g1 if $m1 is bad
1314 # eval { syswrite STDERR, $m1 };        # XXX under utf8, can give
1315 # eval { syswrite STDERR, $m1, $g1 };   # XXX different warnings
1316 # eval { syswrite STDERR, $m1, $g1, $m2 };
1317 eval { my $x; socket $x, $m1, $g1, $m2 };
1318 eval { my ($x,$y); socketpair $x, $y, $m1, $g1, $m2 };
1319 EXPECT
1320 Use of uninitialized value $x in ref-to-glob cast at - line 5.
1321 Use of uninitialized value $g1 in seek at - line 5.
1322 Use of uninitialized value $m1 in seek at - line 5.
1323 Use of uninitialized value $x in ref-to-glob cast at - line 6.
1324 Use of uninitialized value $g1 in sysseek at - line 6.
1325 Use of uninitialized value $m1 in sysseek at - line 6.
1326 Use of uninitialized value $m1 in ref-to-glob cast at - line 7.
1327 Use of uninitialized value $m2 in socket at - line 11.
1328 Use of uninitialized value $g1 in socket at - line 11.
1329 Use of uninitialized value $m1 in socket at - line 11.
1330 Use of uninitialized value $m2 in socketpair at - line 12.
1331 Use of uninitialized value $g1 in socketpair at - line 12.
1332 Use of uninitialized value $m1 in socketpair at - line 12.
1333 ########
1334 use Config; 
1335 BEGIN { 
1336   if ( !$Config{d_flock} &&
1337        !$Config{d_fcntl_can_lock} &&
1338        !$Config{d_lockf} ) {
1339     print <<EOM ;
1340 SKIPPED
1341 # flock not present
1342 EOM
1343     exit ;
1344   } 
1345 }
1346 use warnings 'uninitialized';
1347 our ($g1);
1348
1349 eval { my $x; flock $x, $g1 };
1350 EXPECT
1351 Use of uninitialized value $x in ref-to-glob cast at - line 16.
1352 Use of uninitialized value $g1 in flock at - line 16.
1353 ########
1354 use warnings 'uninitialized';
1355 my ($m1, $v);
1356 our ($g1);
1357
1358 stat;
1359 lstat;
1360 stat $m1;
1361 lstat $g1;
1362
1363 $v = -R $m1;
1364 $v = -W $m1;
1365 $v = -X $m1;
1366 $v = -r $m1;
1367 $v = -w $m1;
1368 $v = -x $m1;
1369 $v = -e $m1;
1370 $v = -o $m1;
1371 $v = -O $m1;
1372 $v = -z $m1;
1373 $v = -s $m1;
1374 $v = -M $m1;
1375 $v = -A $m1;
1376 $v = -C $m1;
1377 $v = -S $m1;
1378 $v = -c $m1;
1379 $v = -b $m1;
1380 $v = -f $m1;
1381 $v = -d $m1;
1382 $v = -p $m1;
1383 $v = -l $m1;
1384 $v = -u $m1;
1385 $v = -g $m1;
1386 # $v = -k $m1; # XXX this is a no-op under win32
1387 $v = -t $m1;
1388 $v = -T $m1;
1389 $v = -B $m1;
1390 EXPECT
1391 Use of uninitialized value $_ in stat at - line 5.
1392 Use of uninitialized value $_ in lstat at - line 6.
1393 Use of uninitialized value $m1 in stat at - line 7.
1394 Use of uninitialized value $g1 in lstat at - line 8.
1395 Use of uninitialized value $m1 in -R at - line 10.
1396 Use of uninitialized value $m1 in -W at - line 11.
1397 Use of uninitialized value $m1 in -X at - line 12.
1398 Use of uninitialized value $m1 in -r at - line 13.
1399 Use of uninitialized value $m1 in -w at - line 14.
1400 Use of uninitialized value $m1 in -x at - line 15.
1401 Use of uninitialized value $m1 in -e at - line 16.
1402 Use of uninitialized value $m1 in -o at - line 17.
1403 Use of uninitialized value $m1 in -O at - line 18.
1404 Use of uninitialized value $m1 in -z at - line 19.
1405 Use of uninitialized value $m1 in -s at - line 20.
1406 Use of uninitialized value $m1 in -M at - line 21.
1407 Use of uninitialized value $m1 in -A at - line 22.
1408 Use of uninitialized value $m1 in -C at - line 23.
1409 Use of uninitialized value $m1 in -S at - line 24.
1410 Use of uninitialized value $m1 in -c at - line 25.
1411 Use of uninitialized value $m1 in -b at - line 26.
1412 Use of uninitialized value $m1 in -f at - line 27.
1413 Use of uninitialized value $m1 in -d at - line 28.
1414 Use of uninitialized value $m1 in -p at - line 29.
1415 Use of uninitialized value $m1 in -l at - line 30.
1416 Use of uninitialized value $m1 in -u at - line 31.
1417 Use of uninitialized value $m1 in -g at - line 32.
1418 Use of uninitialized value $m1 in -t at - line 34.
1419 Use of uninitialized value $m1 in -T at - line 35.
1420 Use of uninitialized value $m1 in -B at - line 36.
1421 ########
1422 use warnings 'uninitialized';
1423 my ($m1, $v);
1424 our ($g1);
1425
1426 $v = localtime $m1;
1427 $v = gmtime $g1;
1428 EXPECT
1429 Use of uninitialized value $m1 in localtime at - line 5.
1430 Use of uninitialized value $g1 in gmtime at - line 6.
1431 ########
1432 use warnings 'uninitialized';
1433 my ($m1, $m2, $v);
1434
1435 $v = eval;
1436 $v = eval $m1;
1437 $m2 = q($m1); $v = 1 + eval $m2;
1438 EXPECT
1439 Use of uninitialized value $_ in eval "string" at - line 4.
1440 Use of uninitialized value $m1 in eval "string" at - line 5.
1441 Use of uninitialized value in addition (+) at - line 6.
1442 ########
1443 use warnings 'uninitialized';
1444 my ($m1);
1445
1446 exit $m1;
1447 EXPECT
1448 Use of uninitialized value $m1 in exit at - line 4.
1449 ########
1450 use warnings 'uninitialized';
1451 my $undef;
1452
1453 if ($undef == 3) {
1454 } elsif ($undef == 0) {
1455 }
1456 EXPECT
1457 Use of uninitialized value $undef in numeric eq (==) at - line 4.
1458 Use of uninitialized value $undef in numeric eq (==) at - line 5.
1459 ########
1460 # TODO long standing bug - conditions of while loops
1461 use warnings;
1462
1463 my $c;
1464 my $d = 1;
1465 while ($c == 0 && $d) {
1466   # a
1467   # few
1468   # blank
1469   # lines
1470   undef $d;
1471 }
1472 EXPECT
1473 Use of uninitialized value $c in numeric eq (==) at - line 5.
1474 Use of uninitialized value $c in numeric eq (==) at - line 5.
1475 ########
1476 # TODO long standing bug - conditions of until loops
1477 use warnings;
1478
1479 my $c;
1480 my $d;
1481 until ($c == 1) {
1482   # a
1483   # few
1484   # blank
1485   # lines
1486   $c = 1 if ++$d == 2;
1487 }
1488 EXPECT
1489 Use of uninitialized value $c in numeric eq (==) at - line 5.
1490 Use of uninitialized value $c in numeric eq (==) at - line 5.
1491 ########
1492 # TODO long standing bug - conditions of for loops
1493 use warnings;
1494
1495 my $c;
1496 my $d;
1497 for ($d = 1; $c == 0 && $d; ) {
1498   # a
1499   # few
1500   # blank
1501   # lines
1502   undef $d;
1503 }
1504
1505 my $e;
1506 for ($d = 2; $d > 0; $e = !($c == 0)) {
1507   # a
1508   # few
1509   # blank
1510   # lines
1511   --$d;
1512 }
1513 EXPECT
1514 Use of uninitialized value $c in numeric eq (==) at - line 5.
1515 Use of uninitialized value $c in numeric eq (==) at - line 5.
1516 Use of uninitialized value $c in numeric eq (==) at - line 14.
1517 Use of uninitialized value $c in numeric eq (==) at - line 14.
1518 ########
1519 # TODO long standing bug - more general variant of the above problem
1520 use warnings;
1521 my $undef;
1522
1523 my $a = $undef + 1;
1524 my $b
1525   = $undef
1526   + 1;
1527 EXPECT
1528 Use of uninitialized value $undef in addition (+) at - line 4.
1529 Use of uninitialized value $undef in addition (+) at - line 7.
1530 ########
1531 use warnings 'uninitialized';
1532 my ($r1, $r2);
1533 $_ = undef;
1534 $v = reverse;
1535 $v = reverse $r1;
1536 $v = reverse "abc", $r2, "def";
1537 EXPECT
1538 Use of uninitialized value in reverse at - line 4.
1539 Use of uninitialized value $r1 in reverse at - line 5.
1540 Use of uninitialized value $r2 in reverse at - line 6.
1541 ########
1542 use warnings 'uninitialized';
1543 #
1544 # ops that can return undef for defined args
1545 # split into separate tests to diagnose the cause of daily build smoke
1546 #
1547 # *** `` not tested: Windows produces an error on STDERR
1548 # *** ditto qx()
1549 # *** pipe() not tested
1550 # *** ioctl not tested
1551 # *** socket not tested
1552 # *** socketpair not tested
1553 # *** bind not tested
1554 # *** connect not tested
1555 # *** listen not tested
1556 # *** shutdown not tested
1557 # *** setsockopt not tested
1558 # *** getpeername not tested
1559 # *** readdir not tested
1560 # *** telldir not tested
1561 # *** seekdir not tested
1562 # *** rewinddir not tested
1563 # *** closedir not tested
1564 # *** gmtime not tested
1565 # *** alarm not tested
1566 # *** semget not tested
1567 # *** getlogin not tested
1568 EXPECT
1569 ########
1570 use warnings 'uninitialized';
1571 if ($^O eq 'MSWin32') {
1572     print <<'EOM';
1573 SKIPPED
1574 # `` produces an error on STDERR on Win32
1575 EOM
1576     exit;
1577
1578 my $nocmd  = '/no/such/command';
1579 my $v;
1580 $v = 1 + `$nocmd`;
1581 EXPECT
1582 Use of uninitialized value in addition (+) at - line 11.
1583 ########
1584 use warnings 'uninitialized';
1585 if ($^O eq 'MSWin32') {
1586     print <<'EOM';
1587 SKIPPED
1588 # qx produces an error on STDERR on Win32
1589 EOM
1590     exit;
1591
1592 my $nocmd  = '/no/such/command';
1593 my $v;
1594 $v = 1 + qx($nocmd);
1595 EXPECT
1596 Use of uninitialized value in addition (+) at - line 11.
1597 ########
1598 use warnings 'uninitialized';
1599 my $nan = "NaN";
1600 if ($nan == $nan) {
1601     print <<'EOM';
1602 SKIPPED
1603 # NaN not supported here.
1604 EOM
1605     exit;
1606
1607 my $v;
1608 $v = 1 + ($nan <=> 1);
1609 EXPECT
1610 Use of uninitialized value in addition (+) at - line 11.
1611 ########
1612 use warnings 'uninitialized';
1613 if ($^O eq 'MSWin32') {
1614     print <<'EOM';
1615 SKIPPED
1616 # -k produces no warning on Win32
1617 EOM
1618     exit;
1619
1620 my $nofile = '/no/such/file';
1621 my $v;
1622 $v = 1 + -k $nofile;
1623 EXPECT
1624 Use of uninitialized value in addition (+) at - line 11.
1625 ########
1626 use warnings 'uninitialized';
1627 my $nofile = '/no/such/file';
1628 my $v;
1629 my $f = "";
1630 $v = 1 + open($f, $nofile);
1631 EXPECT
1632 Use of uninitialized value in addition (+) at - line 5.
1633 ########
1634 use warnings 'uninitialized';
1635 my $nofile = '/no/such/file';
1636 my $v;
1637 $v = 1 + fileno($nofile);
1638 EXPECT
1639 Use of uninitialized value in addition (+) at - line 4.
1640 ########
1641 use warnings 'uninitialized';
1642 my $nofile = '/no/such/file';
1643 my $v;
1644 $v = 1 + binmode($nofile);
1645 EXPECT
1646 Use of uninitialized value in addition (+) at - line 4.
1647 ########
1648 use warnings 'uninitialized';
1649 my $nofile = '/no/such/file';
1650 my $v;
1651 $v = 1 + tied($nofile);
1652 EXPECT
1653 Use of uninitialized value in addition (+) at - line 4.
1654 ########
1655 use warnings 'uninitialized';
1656 my $nofile = '/no/such/file';
1657 my $v;
1658 $v = 1 + getc($nofile);
1659 EXPECT
1660 Use of uninitialized value in addition (+) at - line 4.
1661 ########
1662 use warnings 'uninitialized';
1663 my $nofile = '/no/such/file';
1664 my $v;
1665 $v = 1 + sysread($nofile, my $buf,1);
1666 EXPECT
1667 Use of uninitialized value in addition (+) at - line 4.
1668 ########
1669 use warnings 'uninitialized';
1670 my $nofile = '/no/such/file';
1671 my $v;
1672 $v = 1 + eval { send($nofile, $buf,0) };
1673 EXPECT
1674 Use of uninitialized value in addition (+) at - line 4.
1675 ########
1676 use warnings 'uninitialized';
1677 my $nofile = '/no/such/file';
1678 my $v;
1679 my $fh = "";
1680 $v = 1 + eval { accept($fh, $nofile) };
1681 EXPECT
1682 Use of uninitialized value in addition (+) at - line 5.
1683 ########
1684 use warnings 'uninitialized';
1685 my $nofile = '/no/such/file';
1686 my $v;
1687 $v = 1 + (-r $nofile);
1688 EXPECT
1689 Use of uninitialized value in addition (+) at - line 4.
1690 ########
1691 use warnings 'uninitialized';
1692 my $nofile = '/no/such/file';
1693 my $v;
1694 $v = 1 + (-w $nofile);
1695 EXPECT
1696 Use of uninitialized value in addition (+) at - line 4.
1697 ########
1698 use warnings 'uninitialized';
1699 my $nofile = '/no/such/file';
1700 my $v;
1701 $v = 1 + (-x $nofile);
1702 EXPECT
1703 Use of uninitialized value in addition (+) at - line 4.
1704 ########
1705 use warnings 'uninitialized';
1706 my $nofile = '/no/such/file';
1707 my $v;
1708 $v = 1 + (-o $nofile);
1709 EXPECT
1710 Use of uninitialized value in addition (+) at - line 4.
1711 ########
1712 use warnings 'uninitialized';
1713 my $nofile = '/no/such/file';
1714 my $v;
1715 $v = 1 + (-R $nofile);
1716 EXPECT
1717 Use of uninitialized value in addition (+) at - line 4.
1718 ########
1719 use warnings 'uninitialized';
1720 my $nofile = '/no/such/file';
1721 my $v;
1722 $v = 1 + (-W $nofile);
1723 EXPECT
1724 Use of uninitialized value in addition (+) at - line 4.
1725 ########
1726 use warnings 'uninitialized';
1727 my $nofile = '/no/such/file';
1728 my $v;
1729 $v = 1 + (-X $nofile);
1730 EXPECT
1731 Use of uninitialized value in addition (+) at - line 4.
1732 ########
1733 use warnings 'uninitialized';
1734 my $nofile = '/no/such/file';
1735 my $v;
1736 $v = 1 + (-O $nofile);
1737 EXPECT
1738 Use of uninitialized value in addition (+) at - line 4.
1739 ########
1740 use warnings 'uninitialized';
1741 my $nofile = '/no/such/file';
1742 my $v;
1743 $v = 1 + (-e $nofile);
1744 EXPECT
1745 Use of uninitialized value in addition (+) at - line 4.
1746 ########
1747 use warnings 'uninitialized';
1748 my $nofile = '/no/such/file';
1749 my $v;
1750 $v = 1 + (-z $nofile);
1751 EXPECT
1752 Use of uninitialized value in addition (+) at - line 4.
1753 ########
1754 use warnings 'uninitialized';
1755 my $nofile = '/no/such/file';
1756 my $v;
1757 $v = 1 + (-s $nofile);
1758 EXPECT
1759 Use of uninitialized value in addition (+) at - line 4.
1760 ########
1761 use warnings 'uninitialized';
1762 my $nofile = '/no/such/file';
1763 my $v;
1764 $v = 1 + (-f $nofile);
1765 EXPECT
1766 Use of uninitialized value in addition (+) at - line 4.
1767 ########
1768 use warnings 'uninitialized';
1769 my $nofile = '/no/such/file';
1770 my $v;
1771 $v = 1 + (-d $nofile);
1772 EXPECT
1773 Use of uninitialized value in addition (+) at - line 4.
1774 ########
1775 use warnings 'uninitialized';
1776 my $nofile = '/no/such/file';
1777 my $v;
1778 $v = 1 + (-l $nofile);
1779 EXPECT
1780 Use of uninitialized value in addition (+) at - line 4.
1781 ########
1782 use warnings 'uninitialized';
1783 my $nofile = '/no/such/file';
1784 my $v;
1785 $v = 1 + (-p $nofile);
1786 EXPECT
1787 Use of uninitialized value in addition (+) at - line 4.
1788 ########
1789 use warnings 'uninitialized';
1790 my $nofile = '/no/such/file';
1791 my $v;
1792 $v = 1 + (-S $nofile);
1793 EXPECT
1794 Use of uninitialized value in addition (+) at - line 4.
1795 ########
1796 use warnings 'uninitialized';
1797 my $nofile = '/no/such/file';
1798 my $v;
1799 $v = 1 + (-b $nofile);
1800 EXPECT
1801 Use of uninitialized value in addition (+) at - line 4.
1802 ########
1803 use warnings 'uninitialized';
1804 my $nofile = '/no/such/file';
1805 my $v;
1806 $v = 1 + (-c $nofile);
1807 EXPECT
1808 Use of uninitialized value in addition (+) at - line 4.
1809 ########
1810 use warnings 'uninitialized';
1811 my $nofile = '/no/such/file';
1812 my $v;
1813 $v = 1 + (-t $nofile);
1814 EXPECT
1815 Use of uninitialized value in addition (+) at - line 4.
1816 ########
1817 use warnings 'uninitialized';
1818 my $nofile = '/no/such/file';
1819 my $v;
1820 $v = 1 + (-u $nofile);
1821 EXPECT
1822 Use of uninitialized value in addition (+) at - line 4.
1823 ########
1824 use warnings 'uninitialized';
1825 my $nofile = '/no/such/file';
1826 my $v;
1827 $v = 1 + (-g $nofile);
1828 EXPECT
1829 Use of uninitialized value in addition (+) at - line 4.
1830 ########
1831 use warnings 'uninitialized';
1832 my $nofile = '/no/such/file';
1833 my $v;
1834 $v = 1 + (-T $nofile);
1835 EXPECT
1836 Use of uninitialized value in addition (+) at - line 4.
1837 ########
1838 use warnings 'uninitialized';
1839 my $nofile = '/no/such/file';
1840 my $v;
1841 $v = 1 + (-B $nofile);
1842 EXPECT
1843 Use of uninitialized value in addition (+) at - line 4.
1844 ########
1845 use warnings 'uninitialized';
1846 my $nofile = '/no/such/file';
1847 my $v;
1848 $v = 1 + (-M $nofile);
1849 EXPECT
1850 Use of uninitialized value in addition (+) at - line 4.
1851 ########
1852 use warnings 'uninitialized';
1853 my $nofile = '/no/such/file';
1854 my $v;
1855 $v = 1 + (-A $nofile);
1856 EXPECT
1857 Use of uninitialized value in addition (+) at - line 4.
1858 ########
1859 use warnings 'uninitialized';
1860 my $nofile = '/no/such/file';
1861 my $v;
1862 $v = 1 + (-C $nofile);
1863 EXPECT
1864 Use of uninitialized value in addition (+) at - line 4.
1865 ########
1866 use warnings 'uninitialized';
1867 my $nofile = '/no/such/file';
1868 my $v;
1869 $v = 1 + eval { readlink $nofile };
1870 EXPECT
1871 Use of uninitialized value in addition (+) at - line 4.
1872 ########
1873 use warnings 'uninitialized';
1874 my $nofile = '/no/such/file';
1875 my $v;
1876 $v = 1 + opendir($f, $nofile);
1877 EXPECT
1878 Use of uninitialized value in addition (+) at - line 4.
1879 ########
1880 use warnings 'uninitialized';
1881 my $nofile = '/no/such/file';
1882 my $v;
1883 $v = 1 + undef;
1884 EXPECT
1885 Use of uninitialized value in addition (+) at - line 4.
1886 ########
1887 use warnings 'uninitialized';
1888 my $nofile = '/no/such/file';
1889 my $v;
1890 my $x = 1; $v = 1 + undef($x);
1891 EXPECT
1892 Use of uninitialized value in addition (+) at - line 4.
1893 ########
1894 use warnings 'uninitialized';
1895 my $v;
1896 my $emptys = "";
1897 $v = 1 + substr($emptys,2,1);
1898 EXPECT
1899 Use of uninitialized value in addition (+) at - line 4.
1900 ########
1901 use warnings 'uninitialized';
1902 my $v;
1903 my @emptya;
1904 $v = 1 + each @emptya;
1905 EXPECT
1906 Use of uninitialized value in addition (+) at - line 4.
1907 ########
1908 use warnings 'uninitialized';
1909 my $v;
1910 my %emptyh;
1911 $v = 1 + each %emptyh;
1912 EXPECT
1913 Use of uninitialized value in addition (+) at - line 4.
1914 ########
1915 use warnings 'uninitialized';
1916 my $v;
1917 my @emptya;
1918 $v = 1 + sort @emptya;
1919 EXPECT
1920 Use of uninitialized value in addition (+) at - line 4.
1921 ########
1922 use warnings 'uninitialized';
1923 my $v;
1924 my $zero = 0; $v = 1 + caller($zero);
1925 EXPECT
1926 Use of uninitialized value in addition (+) at - line 3.
1927 ########
1928 use warnings 'uninitialized';
1929 my $nofile = '/no/such/file';
1930 my $v;
1931 $v = 1 + do $nofile;
1932 EXPECT
1933 Use of uninitialized value in addition (+) at - line 4.
1934 ########
1935 use warnings 'uninitialized';
1936 my $v;
1937 my $fn = sub {};
1938 $v = 1 + prototype $fn;
1939 EXPECT
1940 Use of uninitialized value in addition (+) at - line 4.
1941 ########
1942 use warnings 'uninitialized'; no warnings 'experimental::smartmatch';
1943 my $v;
1944 my $fn = sub {};
1945 $v = 1 + (1 ~~ $fn);
1946 EXPECT
1947 Use of uninitialized value in addition (+) at - line 4.
1948 ########
1949 use warnings 'uninitialized';
1950 my $v;
1951 my $f = "";
1952 $v = 1 + (print STDIN $f); # print to STDIN returns undef
1953 EXPECT
1954 Use of uninitialized value in addition (+) at - line 4.
1955 ########
1956 use warnings 'uninitialized';
1957 my $v;
1958 my $f = "";
1959 $v = 1 + (printf STDIN "%s", $f);
1960 EXPECT
1961 Use of uninitialized value in addition (+) at - line 4.
1962 ########
1963 use warnings 'uninitialized';
1964 my $v;
1965 my $f = "";
1966 { use feature 'say'; $v = 1 + (say STDIN "%s", $f); }
1967 EXPECT
1968 Use of uninitialized value in addition (+) at - line 4.
1969 ########
1970 use warnings 'uninitialized';
1971 my $v;
1972 my $f = "";
1973 $v = 1 + (unpack("",$f));
1974 EXPECT
1975 Use of uninitialized value in addition (+) at - line 4.
1976 ########
1977 use warnings 'uninitialized';
1978 my $nofile = '/no/such/file';
1979 my $v;
1980 my $f = "";
1981 $v = 1 + sysopen($f, $nofile, 0);
1982 EXPECT
1983 Use of uninitialized value in addition (+) at - line 5.
1984 ########
1985 use warnings 'uninitialized';
1986 my $v;
1987 { my $x = -1; $v = 1 + sysseek(DATA, $x, 0); }
1988 __END__
1989 EXPECT
1990 Use of uninitialized value in addition (+) at - line 3.
1991 ########
1992 use warnings 'uninitialized';
1993 delete $::{'Foo::'};
1994 my $moo = $Foo::BAR + 42;
1995 __END__
1996 EXPECT
1997 Use of uninitialized value in addition (+) at - line 3.
1998 ########
1999 use warnings 'uninitialized';
2000 use constant {u=>undef, v=>undef};
2001 sub foo () {u}
2002 sub foo () {v}
2003 EXPECT
2004 ########
2005 # [perl #72090]
2006 use warnings 'uninitialized';
2007 $a = @$a > 0;
2008 EXPECT
2009 Use of uninitialized value $a in array dereference at - line 3.
2010 Use of uninitialized value in numeric gt (>) at - line 3.
2011 ########
2012 # [perl #103766]
2013 use warnings 'uninitialized';
2014 "@{[ $x ]}";
2015 EXPECT
2016 Use of uninitialized value in join or string at - line 3.
2017 ########
2018 # inside formats
2019 use warnings 'uninitialized';
2020 my $x;
2021 format =
2022 @
2023 "$x";
2024 .
2025 write;
2026 EXPECT
2027 Use of uninitialized value $x in string at - line 6.
2028 ########
2029 # NAME off-by-one error in hash bucket walk in key detection logic
2030 use warnings 'uninitialized';
2031
2032 for ( 0 .. 20 ) { # we assume that this means we test keys for every bucket
2033     my %h= ( $_ => undef );
2034     my $s= sprintf "%s", $h{$_};
2035 }
2036 EXPECT
2037 Use of uninitialized value $h{"0"} in sprintf at - line 5.
2038 Use of uninitialized value $h{"1"} in sprintf at - line 5.
2039 Use of uninitialized value $h{"2"} in sprintf at - line 5.
2040 Use of uninitialized value $h{"3"} in sprintf at - line 5.
2041 Use of uninitialized value $h{"4"} in sprintf at - line 5.
2042 Use of uninitialized value $h{"5"} in sprintf at - line 5.
2043 Use of uninitialized value $h{"6"} in sprintf at - line 5.
2044 Use of uninitialized value $h{"7"} in sprintf at - line 5.
2045 Use of uninitialized value $h{"8"} in sprintf at - line 5.
2046 Use of uninitialized value $h{"9"} in sprintf at - line 5.
2047 Use of uninitialized value $h{"10"} in sprintf at - line 5.
2048 Use of uninitialized value $h{"11"} in sprintf at - line 5.
2049 Use of uninitialized value $h{"12"} in sprintf at - line 5.
2050 Use of uninitialized value $h{"13"} in sprintf at - line 5.
2051 Use of uninitialized value $h{"14"} in sprintf at - line 5.
2052 Use of uninitialized value $h{"15"} in sprintf at - line 5.
2053 Use of uninitialized value $h{"16"} in sprintf at - line 5.
2054 Use of uninitialized value $h{"17"} in sprintf at - line 5.
2055 Use of uninitialized value $h{"18"} in sprintf at - line 5.
2056 Use of uninitialized value $h{"19"} in sprintf at - line 5.
2057 Use of uninitialized value $h{"20"} in sprintf at - line 5.
2058 ########
2059 # NAME SvPOK && SvLEN==0 should not produce uninit warning
2060 use warnings 'uninitialized';
2061
2062 $v = int(${qr||}); # sv_2iv on a regexp
2063 $v = 1.1 *  ${qr||}; # sv_2nv on a regexp
2064 $v = ${qr||} << 2; # sv_2uv on a regexp
2065
2066 sub TIESCALAR{bless[]}
2067 sub FETCH {${qr||}}
2068 tie $t, "";
2069 $v = 1.1 * $t; # sv_2nv on a tied regexp
2070
2071 EXPECT
2072 ########
2073 # multi-level uninitialised array/hash indexes
2074 use warnings 'uninitialized';
2075
2076 our ($i0, $i2, $i4, $i6, $i8, $i10, $i12);
2077 my  ($i1, $i3, $i5, $i7, $i9, $i11, $i13);
2078
2079 my (@a,%h);
2080 my $v;
2081
2082
2083 # use enough depth that OP_MULTIDEREF needs more than one action word
2084
2085 $v = $a[$i0]{$i1}[$i2]{$i3}[$i4]{$i5}[$i6]{$i7}[$i8]{$i9}[$i10]{$i11}[$i12]{$i13};
2086 $v = $h{$i0}[$i1]{$i2}[$i3]{$i4}[$i5]{$i6}[$i7]{$i8}[$i9]{$i10}[$i11]{$i12}[$i13];
2087
2088 EXPECT
2089 Use of uninitialized value $i0 in array element at - line 13.
2090 Use of uninitialized value $i1 in hash element at - line 13.
2091 Use of uninitialized value $i2 in array element at - line 13.
2092 Use of uninitialized value $i3 in hash element at - line 13.
2093 Use of uninitialized value $i4 in array element at - line 13.
2094 Use of uninitialized value $i5 in hash element at - line 13.
2095 Use of uninitialized value $i6 in array element at - line 13.
2096 Use of uninitialized value $i7 in hash element at - line 13.
2097 Use of uninitialized value $i8 in array element at - line 13.
2098 Use of uninitialized value $i9 in hash element at - line 13.
2099 Use of uninitialized value $i10 in array element at - line 13.
2100 Use of uninitialized value $i11 in hash element at - line 13.
2101 Use of uninitialized value $i12 in array element at - line 13.
2102 Use of uninitialized value $i13 in hash element at - line 13.
2103 Use of uninitialized value $i0 in hash element at - line 14.
2104 Use of uninitialized value $i1 in array element at - line 14.
2105 Use of uninitialized value $i2 in hash element at - line 14.
2106 Use of uninitialized value $i3 in array element at - line 14.
2107 Use of uninitialized value $i4 in hash element at - line 14.
2108 Use of uninitialized value $i5 in array element at - line 14.
2109 Use of uninitialized value $i6 in hash element at - line 14.
2110 Use of uninitialized value $i7 in array element at - line 14.
2111 Use of uninitialized value $i8 in hash element at - line 14.
2112 Use of uninitialized value $i9 in array element at - line 14.
2113 Use of uninitialized value $i10 in hash element at - line 14.
2114 Use of uninitialized value $i11 in array element at - line 14.
2115 Use of uninitialized value $i12 in hash element at - line 14.
2116 Use of uninitialized value $i13 in array element at - line 14.
2117 ########
2118 # misc multideref
2119 use warnings 'uninitialized';
2120 my ($i,$j,$k);
2121 my @a;
2122 my @ra = \@a;
2123 my $v;
2124 $v = exists $a[$i]{$k};
2125 $v = delete $a[$i]{$k};
2126 $v = local $a[$i]{$k};
2127 delete $a[$i]{$k};
2128 $v = $ra->[$i+$j]{$k};
2129 $v = ($ra//0)->[$i]{$k};
2130 $v = $a[length $i]{$k}
2131 EXPECT
2132 Use of uninitialized value $i in array element at - line 7.
2133 Use of uninitialized value $k in exists at - line 7.
2134 Use of uninitialized value $i in array element at - line 8.
2135 Use of uninitialized value $k in delete at - line 8.
2136 Use of uninitialized value $i in array element at - line 9.
2137 Use of uninitialized value $k in hash element at - line 9.
2138 Use of uninitialized value $k in hash element at - line 9.
2139 Use of uninitialized value $k in hash element at - line 9.
2140 Use of uninitialized value $i in array element at - line 10.
2141 Use of uninitialized value $k in delete at - line 10.
2142 Use of uninitialized value $j in addition (+) at - line 11.
2143 Use of uninitialized value $i in addition (+) at - line 11.
2144 Use of uninitialized value $k in hash element at - line 11.
2145 Use of uninitialized value $i in array element at - line 12.
2146 Use of uninitialized value $k in hash element at - line 12.
2147 Use of uninitialized value $i in array element at - line 13.
2148 Use of uninitialized value $k in hash element at - line 13.
2149 ########
2150 # perl #127877
2151 use warnings 'uninitialized';
2152 my ($p, $q, $r, $s, $t, $u, $v, $w, $x, $y);
2153 $p = $p . "a";
2154 $q .= "a";
2155 $r = $r + 17;
2156 $s += 17;
2157 $t = $t - 17;
2158 $u -= 17;
2159 use integer;
2160 $v = $v + 17;
2161 $w += 17;
2162 $x = $x - 17;
2163 $y -= 17;
2164 EXPECT
2165 Use of uninitialized value $p in concatenation (.) or string at - line 4.
2166 Use of uninitialized value $r in addition (+) at - line 6.
2167 Use of uninitialized value $t in subtraction (-) at - line 8.
2168 Use of uninitialized value $v in integer addition (+) at - line 11.
2169 Use of uninitialized value $x in integer subtraction (-) at - line 13.
2170 ########
2171 # NAME 64-bit array subscripts
2172 # SKIP ? length(pack "p", "") < 8
2173 use warnings 'uninitialized';
2174
2175 # aelem + const
2176 use constant foo => \0;
2177 $SIG{__WARN__} = sub {
2178  print STDERR
2179    $_[0] =~ /\$a\[([^]]+)]/ && $1 == foo
2180        ? "ok\n"
2181        : ("$1 != ",0+foo,"\n")
2182 };
2183 () = "$a[foo]";
2184 undef $SIG{__WARN__};
2185
2186 # Multideref
2187 () = "$a[140688675223280]";
2188 EXPECT
2189 ok
2190 Use of uninitialized value $a[140688675223280] in string at - line 15.
2191 ########
2192 # RT #128940
2193 use warnings 'uninitialized';
2194 my $x = "" . open my $fh, "<", "no / such / file";
2195 EXPECT
2196 Use of uninitialized value in concatenation (.) or string at - line 3.
2197 ########
2198 # RT #123910
2199 # undef's arg being undef doesn't trigger warnings - any warning will be
2200 # from tied/magic vars
2201 use warnings 'uninitialized';
2202 undef $0;
2203 EXPECT
2204 Use of uninitialized value in undef operator at - line 5.