This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
4068fabcce192f0981e8df533e3e51f2a59c5036
[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 ${$/} in scalar chomp at - line 6.
413 Use of uninitialized value ${$/} in chomp at - line 8.
414 Use of uninitialized value ${$/} in chomp at - line 8.
415 Use of uninitialized value $y in chomp at - line 8.
416 Use of uninitialized value $y in chop at - line 8.
417 ########
418 use warnings 'uninitialized';
419 my ($m1, @ma, %mh);
420 our ($g1);
421
422 delete $ma[$m1];
423 delete @ma[$m1, $g1];
424 delete $mh{$m1};
425 delete @mh{$m1, $g1};
426 EXPECT
427 Use of uninitialized value $m1 in delete at - line 5.
428 Use of uninitialized value $m1 in delete at - line 6.
429 Use of uninitialized value $g1 in delete at - line 6.
430 Use of uninitialized value $m1 in delete at - line 7.
431 Use of uninitialized value $m1 in delete at - line 8.
432 Use of uninitialized value $g1 in delete at - line 8.
433 ########
434 use warnings 'uninitialized';
435 my ($m1, @ma, %mh);
436 our ($g1);
437
438 my @a = @ma[$m1, $g1];
439 @a = (4,5)[$m1, $g1];
440 @a = @mh{$m1, $g1};
441 EXPECT
442 Use of uninitialized value $m1 in array slice at - line 5.
443 Use of uninitialized value $g1 in array slice at - line 5.
444 Use of uninitialized value $m1 in list slice at - line 6.
445 Use of uninitialized value $g1 in list slice at - line 6.
446 Use of uninitialized value $m1 in hash slice at - line 7.
447 Use of uninitialized value $g1 in hash slice at - line 7.
448 ########
449 use warnings 'uninitialized';
450 my ($m1, @ma, %mh, $v);
451 our ($g1, @ga, %gh);
452
453 $v = exists $ma[$m1];
454 $v = exists $ga[$g1];
455 $v = exists $mh{$m1};
456 $v = exists $gh{$g1};
457 EXPECT
458 Use of uninitialized value $m1 in exists at - line 5.
459 Use of uninitialized value $g1 in exists at - line 6.
460 Use of uninitialized value $m1 in exists at - line 7.
461 Use of uninitialized value $g1 in exists at - line 8.
462 ########
463 use warnings 'uninitialized';
464 my ($m1, $m2);
465 my ($v, @a);
466 my ($t, $u) = (1, 1);
467
468 local $.;
469
470 @ma = (1   .. 2);
471 @ma = ($t  .. 2);
472 @ma = ($m1 .. 2);
473 @ma = (1   .. $u);
474 @ma = (1   .. $m2);
475
476 @ma = (1   ... 2);
477 @ma = ($t  ... 2);
478 @ma = ($m1 ... 2);
479 @ma = (1   ... $u);
480 @ma = (1   ... $m2);
481
482 $v = (1   .. 2);
483 $v = ($t  .. 2);
484 $v = ($m1 .. 2);
485 $v = (1   .. $u);
486 $v = (1   .. $m2);
487
488 $v = (1   ... 2);
489 $v = ($t  ... 2);
490 $v = ($m1 ... 2);
491 $v = (1   ... $u);
492 $v = (1   ... $m2);
493 EXPECT
494 Use of uninitialized value $m1 in range (or flop) at - line 10.
495 Use of uninitialized value $m2 in range (or flop) at - line 12.
496 Use of uninitialized value $m1 in range (or flop) at - line 16.
497 Use of uninitialized value $m2 in range (or flop) at - line 18.
498 Use of uninitialized value $. in range (or flip) at - line 20.
499 Use of uninitialized value $. in range (or flop) at - line 21.
500 Use of uninitialized value $. in range (or flip) at - line 23.
501 Use of uninitialized value $. in range (or flip) at - line 24.
502 Use of uninitialized value $. in range (or flip) at - line 26.
503 Use of uninitialized value $. in range (or flip) at - line 29.
504 Use of uninitialized value $. in range (or flip) at - line 30.
505 ########
506 use warnings 'uninitialized';
507 my ($m1, $m2);
508 my ($v, @a);
509 my ($t, $u) = (1, 1);
510
511 @ma = ($t  .. $u);
512 @ma = ($m1 .. $u);
513 @ma = ($t  .. $m2);
514 @ma = ($m1 .. $m2);
515
516 @ma = ($t  ... $u);
517 @ma = ($m1 ... $u);
518 @ma = ($t  ... $m2);
519 @ma = ($m1 ... $m2);
520
521 $v = ($t  .. $u);
522 $v = ($m1 .. $u);
523 $v = ($t  .. $m2);
524 $v = ($m1 .. $m2);
525
526 $v = ($t  ... $u);
527 $v = ($m1 ... $u);
528 $v = ($t  ... $m2);
529 $v = ($m1 ... $m2);
530 EXPECT
531 Use of uninitialized value $m1 in range (or flop) at - line 7.
532 Use of uninitialized value $m2 in range (or flop) at - line 8.
533 Use of uninitialized value $m1 in range (or flop) at - line 9.
534 Use of uninitialized value $m2 in range (or flop) at - line 9.
535 Use of uninitialized value $m1 in range (or flop) at - line 12.
536 Use of uninitialized value $m2 in range (or flop) at - line 13.
537 Use of uninitialized value $m1 in range (or flop) at - line 14.
538 Use of uninitialized value $m2 in range (or flop) at - line 14.
539 ########
540 use warnings 'uninitialized';
541 my ($m1, $v);
542 our ($g1);
543
544 my ($x1,$x2);
545 $v = $x1 << $m1;
546 $v = $x2 << $g1;
547 EXPECT
548 Use of uninitialized value $m1 in left bitshift (<<) at - line 6.
549 Use of uninitialized value $x1 in left bitshift (<<) at - line 6.
550 Use of uninitialized value $g1 in left bitshift (<<) at - line 7.
551 Use of uninitialized value $x2 in left bitshift (<<) at - line 7.
552 ########
553 use warnings 'uninitialized';
554 my ($m1, $m2, $v);
555 our ($g1, $g2);
556
557 use integer;
558 $v = $m1 + $g1;
559 $v = $m1 - $g1;
560 $v = $m1 * $g1;
561 eval {$v = $m1 / $g1};
562 $v = $m2 / 2;
563 eval {$v = $m1 % $g1};
564 $v = $m2 % 2;
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 <=> $g1;
572 $v = -$m1;
573 EXPECT
574 Use of uninitialized value $g1 in integer addition (+) at - line 6.
575 Use of uninitialized value $m1 in integer addition (+) at - line 6.
576 Use of uninitialized value $g1 in integer subtraction (-) at - line 7.
577 Use of uninitialized value $m1 in integer subtraction (-) at - line 7.
578 Use of uninitialized value $g1 in integer multiplication (*) at - line 8.
579 Use of uninitialized value $m1 in integer multiplication (*) at - line 8.
580 Use of uninitialized value $g1 in integer division (/) at - line 9.
581 Use of uninitialized value $m2 in integer division (/) at - line 10.
582 Use of uninitialized value $g1 in integer modulus (%) at - line 11.
583 Use of uninitialized value $m1 in integer modulus (%) at - line 11.
584 Use of uninitialized value $m2 in integer modulus (%) at - line 12.
585 Use of uninitialized value $g1 in integer lt (<) at - line 13.
586 Use of uninitialized value $m1 in integer lt (<) at - line 13.
587 Use of uninitialized value $g1 in integer gt (>) at - line 14.
588 Use of uninitialized value $m1 in integer gt (>) at - line 14.
589 Use of uninitialized value $g1 in integer le (<=) at - line 15.
590 Use of uninitialized value $m1 in integer le (<=) at - line 15.
591 Use of uninitialized value $g1 in integer ge (>=) at - line 16.
592 Use of uninitialized value $m1 in integer ge (>=) at - line 16.
593 Use of uninitialized value $g1 in integer eq (==) at - line 17.
594 Use of uninitialized value $m1 in integer eq (==) at - line 17.
595 Use of uninitialized value $g1 in integer ne (!=) at - line 18.
596 Use of uninitialized value $m1 in integer ne (!=) at - line 18.
597 Use of uninitialized value $g1 in integer comparison (<=>) at - line 19.
598 Use of uninitialized value $m1 in integer comparison (<=>) at - line 19.
599 Use of uninitialized value $m1 in integer negation (-) at - line 20.
600 ########
601 use warnings 'uninitialized';
602 my ($m1, $m2, $v);
603 our ($g1, $g2);
604
605 $v = int($g1);
606 $v = abs($g2);
607 EXPECT
608 Use of uninitialized value $g1 in int at - line 5.
609 Use of uninitialized value $g2 in abs at - line 6.
610 ########
611 use warnings 'uninitialized';
612 my ($m1, $m2, $v);
613 our ($g1);
614
615 $v = pack $m1;
616 $v = pack "i*", $m2, $g1, $g2;
617 my @unpack = unpack $m1, $m2;
618 EXPECT
619 Use of uninitialized value $m1 in pack at - line 5.
620 Use of uninitialized value $m2 in pack at - line 6.
621 Use of uninitialized value $g1 in pack at - line 6.
622 Use of uninitialized value $g2 in pack at - line 6.
623 Use of uninitialized value $m1 in unpack at - line 7.
624 Use of uninitialized value $m2 in unpack at - line 7.
625 ########
626 use warnings 'uninitialized';
627 my ($m1);
628 our ($g1);
629
630 my @sort;
631 @sort = sort $m1, $g1;
632 @sort = sort {$a <=> $b} $m1, $g1;
633 sub sortf {$a-1 <=> $b-1};
634 @sort = sort  &sortf, $m1, $g1;
635 @sort = sort { undef } 1, 2;
636 sub frobnicate($$) { undef }
637 @sort = sort frobnicate 1, 2;
638 @sort = sort pyfg 1, 2;
639 @sort = sort pyfgc 1, 2;
640 no warnings;
641 sub pyfg { undef }
642 sub pyfgc($$) { undef }
643 use warnings;
644 sub dog {}
645 sub dogwood($$) {}
646 @sort = sort dog     1,2;
647 @sort = sort dogwood 1,2;
648 EXPECT
649 Use of uninitialized value $m1 in sort at - line 6.
650 Use of uninitialized value $g1 in sort at - line 6.
651 Use of uninitialized value $m1 in sort at - line 6.
652 Use of uninitialized value $g1 in sort at - line 6.
653 Use of uninitialized value $m1 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 $g1 in sort at - line 7.
657 Use of uninitialized value $a in subtraction (-) at - line 8.
658 Use of uninitialized value $b in subtraction (-) at - line 8.
659 Use of uninitialized value $m1 in sort at - line 9.
660 Use of uninitialized value $g1 in sort at - line 9.
661 Use of uninitialized value $m1 in sort at - line 9.
662 Use of uninitialized value $m1 in sort at - line 9.
663 Use of uninitialized value $g1 in sort at - line 9.
664 Use of uninitialized value $g1 in sort at - line 9.
665 Use of uninitialized value in sort at - line 10.
666 Use of uninitialized value in sort at - line 12.
667 Use of uninitialized value in sort at - line 13.
668 Use of uninitialized value in sort at - line 14.
669 Use of uninitialized value in sort at - line 21.
670 Use of uninitialized value in sort at - line 22.
671 ########
672 my $nan = sin 9**9**9;
673 if ($nan == $nan) {
674     print <<EOM ;
675 SKIPPED
676 # No nan support
677 EOM
678     exit ;
679 }
680 use warnings 'uninitialized';
681 # The optimised {$a<=>$b} case should behave the same way as unoptimised.
682 @sort = sort { ($a)[0] <=> $b } 1, $nan;
683 @sort = sort {  $a     <=> $b } 1, $nan;
684 EXPECT
685 Use of uninitialized value in sort at - line 11.
686 Use of uninitialized value in sort at - line 12.
687 ########
688 use warnings 'uninitialized';
689 my ($m1, $m2, $v);
690 our ($g1);
691
692 eval { $v = $m1 / $g1 };
693 $v = $m2 / 2;
694 eval { $v = $m1 % $g1 };
695 $v = $m2 % 2;
696 $v = $m1 == $g1;
697 $v = $m1 >= $g1;
698 $v = $m1 >  $g1;
699 $v = $m1 <= $g1;
700 $v = $m1 <  $g1;
701 $v = $m1 *  $g1;
702 $v = $m1 <=>$g1;
703 $v = $m1 != $g1;
704 $v = $m1   -$g1;
705 $v = $m1 ** $g1;
706 $v = $m1 +  $g1;
707 $v = $m1 -  $g1;
708 EXPECT
709 Use of uninitialized value $g1 in division (/) at - line 5.
710 Use of uninitialized value $m1 in division (/) at - line 5.
711 Use of uninitialized value $m2 in division (/) at - line 6.
712 Use of uninitialized value $g1 in modulus (%) at - line 7.
713 Use of uninitialized value $m1 in modulus (%) at - line 7.
714 Use of uninitialized value $m2 in modulus (%) at - line 8.
715 Use of uninitialized value $g1 in numeric eq (==) at - line 9.
716 Use of uninitialized value $m1 in numeric eq (==) at - line 9.
717 Use of uninitialized value $g1 in numeric ge (>=) at - line 10.
718 Use of uninitialized value $m1 in numeric ge (>=) at - line 10.
719 Use of uninitialized value $g1 in numeric gt (>) at - line 11.
720 Use of uninitialized value $m1 in numeric gt (>) at - line 11.
721 Use of uninitialized value $g1 in numeric le (<=) at - line 12.
722 Use of uninitialized value $m1 in numeric le (<=) at - line 12.
723 Use of uninitialized value $g1 in numeric lt (<) at - line 13.
724 Use of uninitialized value $m1 in numeric lt (<) at - line 13.
725 Use of uninitialized value $g1 in multiplication (*) at - line 14.
726 Use of uninitialized value $m1 in multiplication (*) at - line 14.
727 Use of uninitialized value $g1 in numeric comparison (<=>) at - line 15.
728 Use of uninitialized value $m1 in numeric comparison (<=>) at - line 15.
729 Use of uninitialized value $g1 in numeric ne (!=) at - line 16.
730 Use of uninitialized value $m1 in numeric ne (!=) at - line 16.
731 Use of uninitialized value $g1 in subtraction (-) at - line 17.
732 Use of uninitialized value $m1 in subtraction (-) at - line 17.
733 Use of uninitialized value $g1 in exponentiation (**) at - line 18.
734 Use of uninitialized value $m1 in exponentiation (**) at - line 18.
735 Use of uninitialized value $g1 in addition (+) at - line 19.
736 Use of uninitialized value $m1 in addition (+) at - line 19.
737 Use of uninitialized value $g1 in subtraction (-) at - line 20.
738 Use of uninitialized value $m1 in subtraction (-) at - line 20.
739 ########
740 use warnings 'uninitialized';
741 sub TIESCALAR{bless[]}
742 sub FETCH { undef }
743
744 tie my $m1, "";
745 my $v;
746 $v = $m1 + $m1;
747 $v = $m1 - $m1;
748 no warnings;
749 $v = $m1 + $m1;
750 $v = $m1 - $m1;
751 EXPECT
752 Use of uninitialized value $m1 in addition (+) at - line 7.
753 Use of uninitialized value $m1 in addition (+) at - line 7.
754 Use of uninitialized value $m1 in subtraction (-) at - line 8.
755 Use of uninitialized value $m1 in subtraction (-) at - line 8.
756 ########
757 use warnings 'uninitialized';
758 my ($m1, $v);
759 our ($g1);
760
761 $v = *global1{$m1};
762 $v = prototype $g1;
763 $v = bless [], $g1;
764 $v = `$m1`;
765
766 $v = $m1 . $g1;
767 EXPECT
768 Use of uninitialized value $m1 in glob elem at - line 5.
769 Use of uninitialized value $g1 in subroutine prototype at - line 6.
770 Use of uninitialized value $g1 in bless at - line 7.
771 Use of uninitialized value $m1 in quoted execution (``, qx) at - line 8.
772 Use of uninitialized value $m1 in concatenation (.) or string at - line 10.
773 Use of uninitialized value $g1 in concatenation (.) or string at - line 10.
774 ########
775 use warnings 'uninitialized';
776 my ($m1);
777 our ($g1, $g2);
778
779 /y/;
780 /$m1/;
781 /$g1/;
782
783 s/y/z/;         undef $_;
784 s/$m1/z/;       undef $_;
785 s//$g1/;        undef $_;
786 s/$m1/$g1/;     undef $_;
787 tr/x/y/;        undef $_;
788 tr/x/y/r;       undef $_;
789
790 my $_; 
791 /y/;
792 /$m1/;
793 /$g1/;
794 s/y/z/;         undef $_;
795 s/$m1/z/;       undef $_;
796 s//$g1/;        undef $_;
797 s/$m1/$g1/;     undef $_;
798 tr/x/y/;        undef $_;
799 tr/x/y/r;       undef $_;
800
801 $g2 =~ /y/;
802 $g2 =~ /$m1/;
803 $g2 =~ /$g1/;
804 $g2 =~ s/y/z/;          undef $g2;
805 $g2 =~ s/$m1/z/;        undef $g2;
806 $g2 =~ s//$g1/;         undef $g2;
807 $g2 =~ s/$m1/$g1/;      undef $g2;
808 $g2 =~ tr/x/y/;         undef $g2; # XXX can't extract var name yet
809 $g2 =~ tr/x/y/r;        undef $g2; # XXX can't extract var name yet
810
811 my $foo = "abc";
812 $foo =~ /$m1/;
813 $foo =~ /$g1/;
814 $foo =~ s/y/z/;
815 $foo =~ s/$m1/z/;
816 $foo =~ s//$g1/;
817 $foo =~ s/$m1/$g1/;
818 $foo =~ s/./$m1/e;
819 undef $g1;
820 $m1 = '$g1';
821 $foo =~ s//$m1/ee;
822 EXPECT
823 Use of uninitialized value $_ in pattern match (m//) at - line 5.
824 Use of uninitialized value $m1 in regexp compilation at - line 6.
825 Use of uninitialized value $_ in pattern match (m//) at - line 6.
826 Use of uninitialized value $g1 in regexp compilation at - line 7.
827 Use of uninitialized value $_ in pattern match (m//) at - line 7.
828 Use of uninitialized value $_ in substitution (s///) at - line 9.
829 Use of uninitialized value $m1 in regexp compilation at - line 10.
830 Use of uninitialized value $_ in substitution (s///) at - line 10.
831 Use of uninitialized value $_ in substitution (s///) at - line 10.
832 Use of uninitialized value $_ in substitution (s///) at - line 11.
833 Use of uninitialized value $g1 in substitution (s///) at - line 11.
834 Use of uninitialized value $_ in substitution (s///) at - line 11.
835 Use of uninitialized value $g1 in substitution (s///) at - line 11.
836 Use of uninitialized value $m1 in regexp compilation at - line 12.
837 Use of uninitialized value $_ in substitution (s///) at - line 12.
838 Use of uninitialized value $_ in substitution (s///) at - line 12.
839 Use of uninitialized value $g1 in substitution iterator at - line 12.
840 Use of uninitialized value $_ in transliteration (tr///) at - line 13.
841 Use of uninitialized value $_ in transliteration (tr///) at - line 14.
842 Use of uninitialized value $_ in pattern match (m//) at - line 17.
843 Use of uninitialized value $m1 in regexp compilation at - line 18.
844 Use of uninitialized value $_ in pattern match (m//) at - line 18.
845 Use of uninitialized value $g1 in regexp compilation at - line 19.
846 Use of uninitialized value $_ in pattern match (m//) at - line 19.
847 Use of uninitialized value $_ in substitution (s///) at - line 20.
848 Use of uninitialized value $m1 in regexp compilation at - line 21.
849 Use of uninitialized value $_ in substitution (s///) at - line 21.
850 Use of uninitialized value $_ in substitution (s///) at - line 21.
851 Use of uninitialized value $_ in substitution (s///) at - line 22.
852 Use of uninitialized value $g1 in substitution (s///) at - line 22.
853 Use of uninitialized value $_ in substitution (s///) at - line 22.
854 Use of uninitialized value $g1 in substitution (s///) at - line 22.
855 Use of uninitialized value $m1 in regexp compilation at - line 23.
856 Use of uninitialized value $_ in substitution (s///) at - line 23.
857 Use of uninitialized value $_ in substitution (s///) at - line 23.
858 Use of uninitialized value $g1 in substitution iterator at - line 23.
859 Use of uninitialized value $_ in transliteration (tr///) at - line 24.
860 Use of uninitialized value $_ in transliteration (tr///) at - line 25.
861 Use of uninitialized value $g2 in pattern match (m//) at - line 27.
862 Use of uninitialized value $m1 in regexp compilation at - line 28.
863 Use of uninitialized value $g2 in pattern match (m//) at - line 28.
864 Use of uninitialized value $g1 in regexp compilation at - line 29.
865 Use of uninitialized value $g2 in pattern match (m//) at - line 29.
866 Use of uninitialized value $g2 in substitution (s///) at - line 30.
867 Use of uninitialized value $m1 in regexp compilation at - line 31.
868 Use of uninitialized value $g2 in substitution (s///) at - line 31.
869 Use of uninitialized value $g2 in substitution (s///) at - line 31.
870 Use of uninitialized value $g2 in substitution (s///) at - line 32.
871 Use of uninitialized value $g1 in substitution (s///) at - line 32.
872 Use of uninitialized value $g2 in substitution (s///) at - line 32.
873 Use of uninitialized value $g1 in substitution (s///) at - line 32.
874 Use of uninitialized value $m1 in regexp compilation at - line 33.
875 Use of uninitialized value $g2 in substitution (s///) at - line 33.
876 Use of uninitialized value $g2 in substitution (s///) at - line 33.
877 Use of uninitialized value $g1 in substitution iterator at - line 33.
878 Use of uninitialized value in transliteration (tr///) at - line 34.
879 Use of uninitialized value in transliteration (tr///) at - line 35.
880 Use of uninitialized value $m1 in regexp compilation at - line 38.
881 Use of uninitialized value $g1 in regexp compilation at - line 39.
882 Use of uninitialized value $m1 in regexp compilation at - line 41.
883 Use of uninitialized value $g1 in substitution (s///) at - line 42.
884 Use of uninitialized value $m1 in regexp compilation at - line 43.
885 Use of uninitialized value $g1 in substitution iterator at - line 43.
886 Use of uninitialized value $m1 in substitution iterator at - line 44.
887 Use of uninitialized value in substitution iterator at - line 47.
888 ########
889 use warnings 'uninitialized';
890 my ($m1);
891
892 { my $foo = "abc"; (substr($foo,0,0)) = ($m1) }
893 EXPECT
894 Use of uninitialized value $m1 in list assignment at - line 4.
895 ########
896 use warnings 'uninitialized';
897 our ($g1);
898
899 study;
900 study $g1;
901 EXPECT
902 Use of uninitialized value $_ in study at - line 4.
903 Use of uninitialized value $g1 in study at - line 5.
904 ########
905 use warnings 'uninitialized';
906 my ($m1);
907
908 pos()=0;
909 pos($m1)=0;
910 EXPECT
911 Use of uninitialized value $_ in scalar assignment at - line 4.
912 Use of uninitialized value $m1 in scalar assignment at - line 5.
913 ########
914 use warnings 'uninitialized';
915 my ($m1);
916 our ($g1);
917
918 $v = pos($m1) + 1;
919 $v = pos($g1) + 1;
920 $m1 = 0;
921 $g1 = "";
922 $v = pos($m1) + 1;
923 $v = pos($g1) + 1;
924 EXPECT
925 Use of uninitialized value in addition (+) at - line 5.
926 Use of uninitialized value in addition (+) at - line 6.
927 Use of uninitialized value in addition (+) at - line 9.
928 Use of uninitialized value in addition (+) at - line 10.
929 ########
930 use warnings 'uninitialized';
931 my ($m1);
932
933 { my $x = "a" x $m1 }           # NB LHS of repeat does not warn
934 { my @x = ("a") x $m1 }
935 EXPECT
936 Use of uninitialized value $m1 in repeat (x) at - line 4.
937 Use of uninitialized value $m1 in repeat (x) at - line 5.
938 ########
939 use warnings 'uninitialized';
940 my ($m1, $v);
941 our ($g1);
942
943 $v = "$m1";
944
945 $v = $m1 lt $g1;
946 $v = $m1 le $g1;
947 $v = $m1 gt $g1;
948 $v = $m1 ge $g1;
949 $v = $m1 eq $g1;
950 $v = $m1 ne $g1;
951 $v = $m1 cmp $g1;
952 EXPECT
953 Use of uninitialized value $m1 in string at - line 5.
954 Use of uninitialized value $m1 in string lt at - line 7.
955 Use of uninitialized value $g1 in string lt at - line 7.
956 Use of uninitialized value $m1 in string le at - line 8.
957 Use of uninitialized value $g1 in string le at - line 8.
958 Use of uninitialized value $m1 in string gt at - line 9.
959 Use of uninitialized value $g1 in string gt at - line 9.
960 Use of uninitialized value $m1 in string ge at - line 10.
961 Use of uninitialized value $g1 in string ge at - line 10.
962 Use of uninitialized value $m1 in string eq at - line 11.
963 Use of uninitialized value $g1 in string eq at - line 11.
964 Use of uninitialized value $m1 in string ne at - line 12.
965 Use of uninitialized value $g1 in string ne at - line 12.
966 Use of uninitialized value $m1 in string comparison (cmp) at - line 13.
967 Use of uninitialized value $g1 in string comparison (cmp) at - line 13.
968 ########
969 use warnings 'uninitialized';
970 my ($m1, $v);
971 our ($g1);
972
973 $v = atan2($m1,$g1);
974 $v = sin $m1;
975 $v = cos $m1;
976 $v = rand $m1;
977 $v = srand $m1;
978 $v = exp $m1;
979 $v = eval {log $m1};
980 $v = sqrt $m1;
981 $v = hex $m1;
982 $v = oct $m1;
983 $v = oct;
984 $v = length; # does not warn
985 EXPECT
986 Use of uninitialized value $g1 in atan2 at - line 5.
987 Use of uninitialized value $m1 in atan2 at - line 5.
988 Use of uninitialized value $m1 in sin at - line 6.
989 Use of uninitialized value $m1 in cos at - line 7.
990 Use of uninitialized value $m1 in rand at - line 8.
991 Use of uninitialized value $m1 in srand at - line 9.
992 Use of uninitialized value $m1 in exp at - line 10.
993 Use of uninitialized value $m1 in log at - line 11.
994 Use of uninitialized value $m1 in sqrt at - line 12.
995 Use of uninitialized value $m1 in hex at - line 13.
996 Use of uninitialized value $m1 in oct at - line 14.
997 Use of uninitialized value $_ in oct at - line 15.
998 ########
999 use warnings 'uninitialized';
1000 my ($m1, $v);
1001 our ($g1);
1002
1003 $v = substr $m1, $g1;
1004 $v = substr $m1, $g1, $m2;
1005 $v = substr $m1, $g1, $m2, $g2; undef $m1;
1006 substr($m1, $g1) = $g2;         undef $m1; # NB global2
1007 substr($m1, $g1, $m2) = $g2;    undef $m1; # isn't identified
1008
1009 $v = eval {vec ($m1, $g1, $m2)};
1010 eval {vec ($m1, $g1, $m2) = $g2};       undef $m1; # ditto
1011
1012 $v = index  $m1, $m2;
1013 $v = index  $m1, $m2, $g1;
1014 $v = rindex $m1, $m2;
1015 $v = rindex $m1, $m2, $g1;
1016 EXPECT
1017 Use of uninitialized value $g1 in substr at - line 5.
1018 Use of uninitialized value $m1 in substr at - line 5.
1019 Use of uninitialized value $m2 in substr at - line 6.
1020 Use of uninitialized value $g1 in substr at - line 6.
1021 Use of uninitialized value $m1 in substr at - line 6.
1022 Use of uninitialized value $m2 in substr at - line 7.
1023 Use of uninitialized value $g1 in substr at - line 7.
1024 Use of uninitialized value $g2 in substr at - line 7.
1025 Use of uninitialized value $m1 in substr at - line 7.
1026 Use of uninitialized value $g1 in substr at - line 8.
1027 Use of uninitialized value $g2 in substr at - line 8.
1028 Use of uninitialized value $m1 in substr at - line 8.
1029 Use of uninitialized value $m2 in substr at - line 9.
1030 Use of uninitialized value $g1 in substr at - line 9.
1031 Use of uninitialized value $g2 in substr at - line 9.
1032 Use of uninitialized value $m1 in substr at - line 9.
1033 Use of uninitialized value $m2 in vec at - line 11.
1034 Use of uninitialized value $g1 in vec at - line 11.
1035 Use of uninitialized value $m1 in vec at - line 11.
1036 Use of uninitialized value $m2 in vec at - line 12.
1037 Use of uninitialized value $g1 in vec at - line 12.
1038 Use of uninitialized value $m1 in index at - line 14.
1039 Use of uninitialized value $m2 in index at - line 14.
1040 Use of uninitialized value $g1 in index at - line 15.
1041 Use of uninitialized value $m1 in index at - line 15.
1042 Use of uninitialized value $m2 in index at - line 15.
1043 Use of uninitialized value $m1 in rindex at - line 16.
1044 Use of uninitialized value $m2 in rindex at - line 16.
1045 Use of uninitialized value $g1 in rindex at - line 17.
1046 Use of uninitialized value $m1 in rindex at - line 17.
1047 Use of uninitialized value $m2 in rindex at - line 17.
1048 ########
1049 use warnings 'uninitialized';
1050 my ($m1, $v);
1051 our ($g1);
1052
1053 $v = sprintf $m1;
1054 $v = sprintf '%d%d%d%d', $m1, $m2, $g1, $g2;
1055 my $m3; eval {formline $m3 };
1056 formline '@<<@<<@<<@<<', $m1, $m2, $g1, $g2;
1057 EXPECT
1058 Use of uninitialized value $m1 in sprintf at - line 5.
1059 Use of uninitialized value $m1 in sprintf at - line 6.
1060 Use of uninitialized value $m2 in sprintf at - line 6.
1061 Use of uninitialized value $g1 in sprintf at - line 6.
1062 Use of uninitialized value $g2 in sprintf at - line 6.
1063 Use of uninitialized value $m3 in formline at - line 7.
1064 Use of uninitialized value $m1 in formline at - line 8.
1065 Use of uninitialized value $m2 in formline at - line 8.
1066 Use of uninitialized value $g1 in formline at - line 8.
1067 Use of uninitialized value $g2 in formline at - line 8.
1068 ########
1069 use warnings 'uninitialized';
1070 my ($m1, $v);
1071 our ($g1);
1072
1073 $v = crypt $m1, $g1;
1074
1075 $v = ord;
1076 $v = ord $m1;
1077 $v = chr;
1078 $v = chr $m1;
1079
1080 $v = ucfirst;
1081 $v = ucfirst $m1;
1082 $v = lcfirst;
1083 $v = lcfirst $m1;
1084 $v = uc;
1085 $v = uc $m1;
1086 $v = lc;
1087 $v = lc $m1;
1088
1089 $v = quotemeta;
1090 $v = quotemeta $m1;
1091 EXPECT
1092 Use of uninitialized value $m1 in crypt at - line 5.
1093 Use of uninitialized value $g1 in crypt at - line 5.
1094 Use of uninitialized value $_ in ord at - line 7.
1095 Use of uninitialized value $m1 in ord at - line 8.
1096 Use of uninitialized value $_ in chr at - line 9.
1097 Use of uninitialized value $m1 in chr at - line 10.
1098 Use of uninitialized value $_ in ucfirst at - line 12.
1099 Use of uninitialized value $m1 in ucfirst at - line 13.
1100 Use of uninitialized value $_ in lcfirst at - line 14.
1101 Use of uninitialized value $m1 in lcfirst at - line 15.
1102 Use of uninitialized value $_ in uc at - line 16.
1103 Use of uninitialized value $m1 in uc at - line 17.
1104 Use of uninitialized value $_ in lc at - line 18.
1105 Use of uninitialized value $m1 in lc at - line 19.
1106 Use of uninitialized value $_ in quotemeta at - line 21.
1107 Use of uninitialized value $m1 in quotemeta at - line 22.
1108 ########
1109 use warnings 'uninitialized';
1110 my ($m1, $v1, $v2, $v3, $v4);
1111 our ($g1);
1112
1113 ($v1,$v2,$v3,$v4) = split;
1114 ($v1,$v2,$v3,$v4) = split $m1;
1115 ($v1,$v2,$v3,$v4) = split $m1, $m2;
1116 ($v1,$v2,$v3,$v4) = split $m1, $m2, $g1;
1117
1118 $v1 = join $m1;
1119 $v2 = join $m1, $m2;
1120 $v3 = join $m1, $m2, $m3;
1121 EXPECT
1122 Use of uninitialized value $_ in split at - line 5.
1123 Use of uninitialized value $m1 in regexp compilation at - line 6.
1124 Use of uninitialized value $_ in split at - line 6.
1125 Use of uninitialized value $m1 in regexp compilation at - line 7.
1126 Use of uninitialized value $m2 in split at - line 7.
1127 Use of uninitialized value $m1 in regexp compilation at - line 8.
1128 Use of uninitialized value $g1 in split at - line 8.
1129 Use of uninitialized value $m2 in split at - line 8.
1130 Use of uninitialized value $m1 in join or string at - line 10.
1131 Use of uninitialized value $m1 in join or string at - line 11.
1132 Use of uninitialized value $m2 in join or string at - line 11.
1133 Use of uninitialized value $m1 in join or string at - line 12.
1134 Use of uninitialized value $m2 in join or string at - line 12.
1135 Use of uninitialized value $m3 in join or string at - line 12.
1136 ########
1137 use warnings 'uninitialized';
1138 my ($m1, $m2, @ma, $v);
1139
1140 our @foo1=(1,undef); chomp @foo1;
1141 my  @foo2=(1,undef); chomp @foo2;
1142 our @foo3=(1,undef); chop  @foo3;
1143 my  @foo4=(1,undef); chop  @foo4;
1144 our @foo5=(1,undef); $v = sprintf "%s%s",@foo5;
1145 my  @foo6=(1,undef); $v = sprintf "%s%s",@foo6;
1146 our %foo7=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s",%foo7;
1147 my  %foo8=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s",%foo8;
1148 our @foo9 =(1,undef); $v = sprintf "%s%s%s%s",$m1,@foo9, $ma[2];
1149 my  @foo10=(1,undef); $v = sprintf "%s%s%s%s",$m2,@foo10,$ma[2];
1150 our %foo11=('foo'=>'bar','baz'=>undef); $v = join '', %foo11;
1151 my  %foo12=('foo'=>'bar','baz'=>undef); $v = join '', %foo12;
1152 our %foo13=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo13;
1153 my  %foo14=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo14;
1154 EXPECT
1155 Use of uninitialized value $foo1[1] in chomp at - line 4.
1156 Use of uninitialized value $foo2[1] in chomp at - line 5.
1157 Use of uninitialized value $foo3[1] in chop at - line 6.
1158 Use of uninitialized value $foo4[1] in chop at - line 7.
1159 Use of uninitialized value $foo5[1] in sprintf at - line 8.
1160 Use of uninitialized value $foo6[1] in sprintf at - line 9.
1161 Use of uninitialized value $foo7{"baz"} in sprintf at - line 10.
1162 Use of uninitialized value $foo8{"baz"} in sprintf at - line 11.
1163 Use of uninitialized value $m1 in sprintf at - line 12.
1164 Use of uninitialized value $foo9[1] in sprintf at - line 12.
1165 Use of uninitialized value in sprintf at - line 12.
1166 Use of uninitialized value $m2 in sprintf at - line 13.
1167 Use of uninitialized value $foo10[1] in sprintf at - line 13.
1168 Use of uninitialized value in sprintf at - line 13.
1169 Use of uninitialized value $foo11{"baz"} in join or string at - line 14.
1170 Use of uninitialized value $foo12{"baz"} in join or string at - line 15.
1171 Use of uninitialized value within %foo13 in join or string at - line 16.
1172 Use of uninitialized value within %foo14 in join or string at - line 17.
1173 ########
1174 use warnings 'uninitialized';
1175 my ($v);
1176
1177 undef $^A; $v = $^A + ${^FOO}; # should output '^A' not chr(1)
1178 *GLOB1 = *GLOB2;
1179 $v = $GLOB1 + 1;
1180 $v = $GLOB2 + 1;
1181 EXPECT
1182 Use of uninitialized value $^FOO in addition (+) at - line 4.
1183 Use of uninitialized value $^A in addition (+) at - line 4.
1184 Use of uninitialized value $GLOB1 in addition (+) at - line 6.
1185 Use of uninitialized value $GLOB2 in addition (+) at - line 7.
1186 ########
1187 use warnings 'uninitialized';
1188 my ($v);
1189
1190 # check hash key is sanitised
1191 my %h = ("\0011\002\r\n\t\f\"\\\x{1234}abcdefghijklmnopqrstuvwxyz", undef);
1192 $v = join '', %h;
1193 EXPECT
1194 Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\\x{1234}abcde"...} in join or string at - line 6.
1195 ########
1196 use warnings 'uninitialized';
1197 my ($m1, $v);
1198 our ($g1);
1199
1200 $v = eval { \&$m1 };
1201 $v = eval { \&$g1 };
1202
1203 my @a;
1204 @a = splice @a, $m1, $g1;
1205 $v = 1 + splice @a, $m1, $g1;
1206
1207 my $x = bless [], 'Z';
1208 eval { $x->$m1() };
1209
1210 eval { &$m1() };
1211 eval { &$g1() };
1212
1213 warn $m1,$g1,"foo";
1214
1215 eval { die $m1, $g1 };
1216
1217 reset $m1;
1218 reset $g1;
1219 EXPECT
1220 Use of uninitialized value $m1 in subroutine dereference at - line 5.
1221 Use of uninitialized value $g1 in subroutine dereference at - line 6.
1222 Use of uninitialized value $m1 in splice at - line 9.
1223 Use of uninitialized value $g1 in splice at - line 9.
1224 Use of uninitialized value $m1 in splice at - line 10.
1225 Use of uninitialized value $g1 in splice at - line 10.
1226 Use of uninitialized value in addition (+) at - line 10.
1227 Use of uninitialized value $m1 in method lookup at - line 13.
1228 Use of uninitialized value $m1 in warn at - line 18.
1229 Use of uninitialized value $g1 in warn at - line 18.
1230 foo at - line 18.
1231 Use of uninitialized value $m1 in die at - line 20.
1232 Use of uninitialized value $g1 in die at - line 20.
1233 Use of uninitialized value $m1 in symbol reset at - line 22.
1234 Use of uninitialized value $g1 in symbol reset at - line 23.
1235 ########
1236 use warnings 'uninitialized';
1237 my ($m1);
1238 our ($g1);
1239
1240 open FOO;               # accesses $FOO
1241 my $foo = 'FO';
1242 open($foo."O"); # accesses $FOO
1243 open my $x;             # accesses ${*$x}
1244 open $foobar;   # accesses ${*$foobar}
1245 my $y;
1246 open $y, $m1;
1247 eval { open $y, $m1, $g1 };
1248 open $y, '<', $g1;
1249
1250 sysopen $y, $m1, $m2;
1251 sysopen $y, $m1, $g1, $m2;
1252
1253 my $old = umask;
1254 umask $m1;
1255 umask $g1;
1256 umask $old;
1257
1258 binmode STDIN, $m1;
1259 EXPECT
1260 Use of uninitialized value $FOO in open at - line 5.
1261 Use of uninitialized value in open at - line 7.
1262 Use of uninitialized value in open at - line 8.
1263 Use of uninitialized value in open at - line 9.
1264 Use of uninitialized value $m1 in open at - line 11.
1265 Use of uninitialized value $m1 in open at - line 12.
1266 Use of uninitialized value $g1 in open at - line 13.
1267 Use of uninitialized value $m2 in sysopen at - line 15.
1268 Use of uninitialized value $m1 in sysopen at - line 15.
1269 Use of uninitialized value $m2 in sysopen at - line 16.
1270 Use of uninitialized value $g1 in sysopen at - line 16.
1271 Use of uninitialized value $m1 in sysopen at - line 16.
1272 Use of uninitialized value $m1 in umask at - line 19.
1273 Use of uninitialized value $g1 in umask at - line 20.
1274 Use of uninitialized value $m1 in binmode at - line 23.
1275 ########
1276 use warnings 'uninitialized';
1277 my ($m1);
1278 our ($g1);
1279
1280 eval { my $x; tie $x, $m1 };
1281
1282 eval { my $x; read    $m1, $x, $g1 };
1283 eval { my $x; read    $m1, $x, $g1, $g2 };
1284 eval { my $x; sysread $m1, $x, $g1 };
1285 eval { my $x; sysread $m1, $x, $g1, $g2 };
1286 EXPECT
1287 Use of uninitialized value $m1 in tie at - line 5.
1288 Use of uninitialized value $m1 in ref-to-glob cast at - line 7.
1289 Use of uninitialized value $g1 in read at - line 7.
1290 Use of uninitialized value $m1 in ref-to-glob cast at - line 8.
1291 Use of uninitialized value $g1 in read at - line 8.
1292 Use of uninitialized value $g2 in read at - line 8.
1293 Use of uninitialized value $m1 in ref-to-glob cast at - line 9.
1294 Use of uninitialized value $g1 in sysread at - line 9.
1295 Use of uninitialized value $m1 in ref-to-glob cast at - line 10.
1296 Use of uninitialized value $g1 in sysread at - line 10.
1297 Use of uninitialized value $g2 in sysread at - line 10.
1298 ########
1299 use warnings 'uninitialized';
1300 my ($m1);
1301 our ($g1, @ga);
1302
1303 printf $m1;
1304 printf STDERR "%d%d%d%d\n", $m1, $m2, $g1, $g2;
1305 printf $ga[1000];
1306 printf STDERR "FOO1:%s\n", $ga[1000];
1307 printf STDERR "FOO2:%s%s%s%s\n", $m1, $g1, $ga[1],$m2;
1308 printf STDERR "FOO3:%s%s%s\n", "X", $ga[1],"Y";
1309 EXPECT
1310 Use of uninitialized value $m1 in printf at - line 5.
1311 Use of uninitialized value $m1 in printf at - line 6.
1312 Use of uninitialized value $m2 in printf at - line 6.
1313 Use of uninitialized value $g1 in printf at - line 6.
1314 Use of uninitialized value $g2 in printf at - line 6.
1315 0000
1316 Use of uninitialized value in printf at - line 7.
1317 Use of uninitialized value in printf at - line 8.
1318 FOO1:
1319 Use of uninitialized value $m1 in printf at - line 9.
1320 Use of uninitialized value $g1 in printf at - line 9.
1321 Use of uninitialized value in printf at - line 9.
1322 Use of uninitialized value $m2 in printf at - line 9.
1323 FOO2:
1324 Use of uninitialized value in printf at - line 10.
1325 FOO3:XY
1326 ########
1327 use warnings 'uninitialized';
1328 my ($m1);
1329 our ($g1);
1330
1331 eval { my $x; seek    $x,$m1, $g1 };
1332 eval { my $x; sysseek $x,$m1, $g1 };
1333 eval { syswrite $m1, $g1 }; # logic changed - now won't try $g1 if $m1 is bad
1334 # eval { syswrite STDERR, $m1 };        # XXX under utf8, can give
1335 # eval { syswrite STDERR, $m1, $g1 };   # XXX different warnings
1336 # eval { syswrite STDERR, $m1, $g1, $m2 };
1337 eval { my $x; socket $x, $m1, $g1, $m2 };
1338 eval { my ($x,$y); socketpair $x, $y, $m1, $g1, $m2 };
1339 EXPECT
1340 Use of uninitialized value $x in ref-to-glob cast at - line 5.
1341 Use of uninitialized value $g1 in seek at - line 5.
1342 Use of uninitialized value $m1 in seek at - line 5.
1343 Use of uninitialized value $x in ref-to-glob cast at - line 6.
1344 Use of uninitialized value $g1 in sysseek at - line 6.
1345 Use of uninitialized value $m1 in sysseek at - line 6.
1346 Use of uninitialized value $m1 in ref-to-glob cast at - line 7.
1347 Use of uninitialized value $m2 in socket at - line 11.
1348 Use of uninitialized value $g1 in socket at - line 11.
1349 Use of uninitialized value $m1 in socket at - line 11.
1350 Use of uninitialized value $m2 in socketpair at - line 12.
1351 Use of uninitialized value $g1 in socketpair at - line 12.
1352 Use of uninitialized value $m1 in socketpair at - line 12.
1353 ########
1354 use Config; 
1355 BEGIN { 
1356   if ( !$Config{d_flock} &&
1357        !$Config{d_fcntl_can_lock} &&
1358        !$Config{d_lockf} ) {
1359     print <<EOM ;
1360 SKIPPED
1361 # flock not present
1362 EOM
1363     exit ;
1364   } 
1365 }
1366 use warnings 'uninitialized';
1367 our ($g1);
1368
1369 eval { my $x; flock $x, $g1 };
1370 EXPECT
1371 Use of uninitialized value $x in ref-to-glob cast at - line 16.
1372 Use of uninitialized value $g1 in flock at - line 16.
1373 ########
1374 use warnings 'uninitialized';
1375 my ($m1, $v);
1376 our ($g1);
1377
1378 stat;
1379 lstat;
1380 stat $m1;
1381 lstat $g1;
1382
1383 $v = -R $m1;
1384 $v = -W $m1;
1385 $v = -X $m1;
1386 $v = -r $m1;
1387 $v = -w $m1;
1388 $v = -x $m1;
1389 $v = -e $m1;
1390 $v = -o $m1;
1391 $v = -O $m1;
1392 $v = -z $m1;
1393 $v = -s $m1;
1394 $v = -M $m1;
1395 $v = -A $m1;
1396 $v = -C $m1;
1397 $v = -S $m1;
1398 $v = -c $m1;
1399 $v = -b $m1;
1400 $v = -f $m1;
1401 $v = -d $m1;
1402 $v = -p $m1;
1403 $v = -l $m1;
1404 $v = -u $m1;
1405 $v = -g $m1;
1406 # $v = -k $m1; # XXX this is a no-op under win32
1407 $v = -t $m1;
1408 $v = -T $m1;
1409 $v = -B $m1;
1410 EXPECT
1411 Use of uninitialized value $_ in stat at - line 5.
1412 Use of uninitialized value $_ in lstat at - line 6.
1413 Use of uninitialized value $m1 in stat at - line 7.
1414 Use of uninitialized value $g1 in lstat at - line 8.
1415 Use of uninitialized value $m1 in -R at - line 10.
1416 Use of uninitialized value $m1 in -W at - line 11.
1417 Use of uninitialized value $m1 in -X at - line 12.
1418 Use of uninitialized value $m1 in -r at - line 13.
1419 Use of uninitialized value $m1 in -w at - line 14.
1420 Use of uninitialized value $m1 in -x at - line 15.
1421 Use of uninitialized value $m1 in -e at - line 16.
1422 Use of uninitialized value $m1 in -o at - line 17.
1423 Use of uninitialized value $m1 in -O at - line 18.
1424 Use of uninitialized value $m1 in -z at - line 19.
1425 Use of uninitialized value $m1 in -s at - line 20.
1426 Use of uninitialized value $m1 in -M at - line 21.
1427 Use of uninitialized value $m1 in -A at - line 22.
1428 Use of uninitialized value $m1 in -C at - line 23.
1429 Use of uninitialized value $m1 in -S at - line 24.
1430 Use of uninitialized value $m1 in -c at - line 25.
1431 Use of uninitialized value $m1 in -b at - line 26.
1432 Use of uninitialized value $m1 in -f at - line 27.
1433 Use of uninitialized value $m1 in -d at - line 28.
1434 Use of uninitialized value $m1 in -p at - line 29.
1435 Use of uninitialized value $m1 in -l at - line 30.
1436 Use of uninitialized value $m1 in -u at - line 31.
1437 Use of uninitialized value $m1 in -g at - line 32.
1438 Use of uninitialized value $m1 in -t at - line 34.
1439 Use of uninitialized value $m1 in -T at - line 35.
1440 Use of uninitialized value $m1 in -B at - line 36.
1441 ########
1442 use warnings 'uninitialized';
1443 my ($m1, $v);
1444 our ($g1);
1445
1446 $v = localtime $m1;
1447 $v = gmtime $g1;
1448 EXPECT
1449 Use of uninitialized value $m1 in localtime at - line 5.
1450 Use of uninitialized value $g1 in gmtime at - line 6.
1451 ########
1452 use warnings 'uninitialized';
1453 my ($m1, $m2, $v);
1454
1455 $v = eval;
1456 $v = eval $m1;
1457 $m2 = q($m1); $v = 1 + eval $m2;
1458 EXPECT
1459 Use of uninitialized value $_ in eval "string" at - line 4.
1460 Use of uninitialized value $m1 in eval "string" at - line 5.
1461 Use of uninitialized value in addition (+) at - line 6.
1462 ########
1463 use warnings 'uninitialized';
1464 my ($m1);
1465
1466 exit $m1;
1467 EXPECT
1468 Use of uninitialized value $m1 in exit at - line 4.
1469 ########
1470 use warnings 'uninitialized';
1471 my $undef;
1472
1473 if ($undef == 3) {
1474 } elsif ($undef == 0) {
1475 }
1476 EXPECT
1477 Use of uninitialized value $undef in numeric eq (==) at - line 4.
1478 Use of uninitialized value $undef in numeric eq (==) at - line 5.
1479 ########
1480 # TODO long standing bug - conditions of while loops
1481 use warnings;
1482
1483 my $c;
1484 my $d = 1;
1485 while ($c == 0 && $d) {
1486   # a
1487   # few
1488   # blank
1489   # lines
1490   undef $d;
1491 }
1492 EXPECT
1493 Use of uninitialized value $c in numeric eq (==) at - line 5.
1494 Use of uninitialized value $c in numeric eq (==) at - line 5.
1495 ########
1496 # TODO long standing bug - conditions of until loops
1497 use warnings;
1498
1499 my $c;
1500 my $d;
1501 until ($c == 1) {
1502   # a
1503   # few
1504   # blank
1505   # lines
1506   $c = 1 if ++$d == 2;
1507 }
1508 EXPECT
1509 Use of uninitialized value $c in numeric eq (==) at - line 5.
1510 Use of uninitialized value $c in numeric eq (==) at - line 5.
1511 ########
1512 # TODO long standing bug - conditions of for loops
1513 use warnings;
1514
1515 my $c;
1516 my $d;
1517 for ($d = 1; $c == 0 && $d; ) {
1518   # a
1519   # few
1520   # blank
1521   # lines
1522   undef $d;
1523 }
1524
1525 my $e;
1526 for ($d = 2; $d > 0; $e = !($c == 0)) {
1527   # a
1528   # few
1529   # blank
1530   # lines
1531   --$d;
1532 }
1533 EXPECT
1534 Use of uninitialized value $c in numeric eq (==) at - line 5.
1535 Use of uninitialized value $c in numeric eq (==) at - line 5.
1536 Use of uninitialized value $c in numeric eq (==) at - line 14.
1537 Use of uninitialized value $c in numeric eq (==) at - line 14.
1538 ########
1539 # TODO long standing bug - more general variant of the above problem
1540 use warnings;
1541 my $undef;
1542
1543 my $a = $undef + 1;
1544 my $b
1545   = $undef
1546   + 1;
1547 EXPECT
1548 Use of uninitialized value $undef in addition (+) at - line 4.
1549 Use of uninitialized value $undef in addition (+) at - line 7.
1550 ########
1551 use warnings 'uninitialized';
1552 my ($r1, $r2);
1553 $_ = undef;
1554 $v = reverse;
1555 $v = reverse $r1;
1556 $v = reverse "abc", $r2, "def";
1557 EXPECT
1558 Use of uninitialized value in reverse at - line 4.
1559 Use of uninitialized value $r1 in reverse at - line 5.
1560 Use of uninitialized value $r2 in reverse at - line 6.
1561 ########
1562 use warnings 'uninitialized';
1563 #
1564 # ops that can return undef for defined args
1565 # split into separate tests to diagnose the cause of daily build smoke
1566 #
1567 # *** `` not tested: Windows produces an error on STDERR
1568 # *** ditto qx()
1569 # *** pipe() not tested
1570 # *** ioctl not tested
1571 # *** socket not tested
1572 # *** socketpair not tested
1573 # *** bind not tested
1574 # *** connect not tested
1575 # *** listen not tested
1576 # *** shutdown not tested
1577 # *** setsockopt not tested
1578 # *** getpeername not tested
1579 # *** readdir not tested
1580 # *** telldir not tested
1581 # *** seekdir not tested
1582 # *** rewinddir not tested
1583 # *** closedir not tested
1584 # *** gmtime not tested
1585 # *** alarm not tested
1586 # *** semget not tested
1587 # *** getlogin not tested
1588 EXPECT
1589 ########
1590 use warnings 'uninitialized';
1591 if ($^O eq 'MSWin32') {
1592     print <<'EOM';
1593 SKIPPED
1594 # `` produces an error on STDERR on Win32
1595 EOM
1596     exit;
1597
1598 my $nocmd  = '/no/such/command';
1599 my $v;
1600 $v = 1 + `$nocmd`;
1601 EXPECT
1602 Use of uninitialized value in addition (+) at - line 11.
1603 ########
1604 use warnings 'uninitialized';
1605 if ($^O eq 'MSWin32') {
1606     print <<'EOM';
1607 SKIPPED
1608 # qx produces an error on STDERR on Win32
1609 EOM
1610     exit;
1611
1612 my $nocmd  = '/no/such/command';
1613 my $v;
1614 $v = 1 + qx($nocmd);
1615 EXPECT
1616 Use of uninitialized value in addition (+) at - line 11.
1617 ########
1618 use warnings 'uninitialized';
1619 my $nan = "NaN";
1620 if ($nan == $nan) {
1621     print <<'EOM';
1622 SKIPPED
1623 # NaN not supported here.
1624 EOM
1625     exit;
1626
1627 my $v;
1628 $v = 1 + ($nan <=> 1);
1629 EXPECT
1630 Use of uninitialized value in addition (+) at - line 11.
1631 ########
1632 use warnings 'uninitialized';
1633 if ($^O eq 'MSWin32') {
1634     print <<'EOM';
1635 SKIPPED
1636 # -k produces no warning on Win32
1637 EOM
1638     exit;
1639
1640 my $nofile = '/no/such/file';
1641 my $v;
1642 $v = 1 + -k $nofile;
1643 EXPECT
1644 Use of uninitialized value in addition (+) at - line 11.
1645 ########
1646 use warnings 'uninitialized';
1647 my $nofile = '/no/such/file';
1648 my $v;
1649 my $f = "";
1650 $v = 1 + open($f, $nofile);
1651 EXPECT
1652 Use of uninitialized value in addition (+) at - line 5.
1653 ########
1654 use warnings 'uninitialized';
1655 my $nofile = '/no/such/file';
1656 my $v;
1657 $v = 1 + fileno($nofile);
1658 EXPECT
1659 Use of uninitialized value in addition (+) at - line 4.
1660 ########
1661 use warnings 'uninitialized';
1662 my $nofile = '/no/such/file';
1663 my $v;
1664 $v = 1 + binmode($nofile);
1665 EXPECT
1666 Use of uninitialized value in addition (+) at - line 4.
1667 ########
1668 use warnings 'uninitialized';
1669 my $nofile = '/no/such/file';
1670 my $v;
1671 $v = 1 + tied($nofile);
1672 EXPECT
1673 Use of uninitialized value in addition (+) at - line 4.
1674 ########
1675 use warnings 'uninitialized';
1676 my $nofile = '/no/such/file';
1677 my $v;
1678 $v = 1 + getc($nofile);
1679 EXPECT
1680 Use of uninitialized value in addition (+) at - line 4.
1681 ########
1682 use warnings 'uninitialized';
1683 my $nofile = '/no/such/file';
1684 my $v;
1685 $v = 1 + sysread($nofile, my $buf,1);
1686 EXPECT
1687 Use of uninitialized value in addition (+) at - line 4.
1688 ########
1689 use warnings 'uninitialized';
1690 my $nofile = '/no/such/file';
1691 my $v;
1692 $v = 1 + eval { send($nofile, $buf,0) };
1693 EXPECT
1694 Use of uninitialized value in addition (+) at - line 4.
1695 ########
1696 use warnings 'uninitialized';
1697 my $nofile = '/no/such/file';
1698 my $v;
1699 my $fh = "";
1700 $v = 1 + eval { accept($fh, $nofile) };
1701 EXPECT
1702 Use of uninitialized value in addition (+) at - line 5.
1703 ########
1704 use warnings 'uninitialized';
1705 my $nofile = '/no/such/file';
1706 my $v;
1707 $v = 1 + (-r $nofile);
1708 EXPECT
1709 Use of uninitialized value in addition (+) at - line 4.
1710 ########
1711 use warnings 'uninitialized';
1712 my $nofile = '/no/such/file';
1713 my $v;
1714 $v = 1 + (-w $nofile);
1715 EXPECT
1716 Use of uninitialized value in addition (+) at - line 4.
1717 ########
1718 use warnings 'uninitialized';
1719 my $nofile = '/no/such/file';
1720 my $v;
1721 $v = 1 + (-x $nofile);
1722 EXPECT
1723 Use of uninitialized value in addition (+) at - line 4.
1724 ########
1725 use warnings 'uninitialized';
1726 my $nofile = '/no/such/file';
1727 my $v;
1728 $v = 1 + (-o $nofile);
1729 EXPECT
1730 Use of uninitialized value in addition (+) at - line 4.
1731 ########
1732 use warnings 'uninitialized';
1733 my $nofile = '/no/such/file';
1734 my $v;
1735 $v = 1 + (-R $nofile);
1736 EXPECT
1737 Use of uninitialized value in addition (+) at - line 4.
1738 ########
1739 use warnings 'uninitialized';
1740 my $nofile = '/no/such/file';
1741 my $v;
1742 $v = 1 + (-W $nofile);
1743 EXPECT
1744 Use of uninitialized value in addition (+) at - line 4.
1745 ########
1746 use warnings 'uninitialized';
1747 my $nofile = '/no/such/file';
1748 my $v;
1749 $v = 1 + (-X $nofile);
1750 EXPECT
1751 Use of uninitialized value in addition (+) at - line 4.
1752 ########
1753 use warnings 'uninitialized';
1754 my $nofile = '/no/such/file';
1755 my $v;
1756 $v = 1 + (-O $nofile);
1757 EXPECT
1758 Use of uninitialized value in addition (+) at - line 4.
1759 ########
1760 use warnings 'uninitialized';
1761 my $nofile = '/no/such/file';
1762 my $v;
1763 $v = 1 + (-e $nofile);
1764 EXPECT
1765 Use of uninitialized value in addition (+) at - line 4.
1766 ########
1767 use warnings 'uninitialized';
1768 my $nofile = '/no/such/file';
1769 my $v;
1770 $v = 1 + (-z $nofile);
1771 EXPECT
1772 Use of uninitialized value in addition (+) at - line 4.
1773 ########
1774 use warnings 'uninitialized';
1775 my $nofile = '/no/such/file';
1776 my $v;
1777 $v = 1 + (-s $nofile);
1778 EXPECT
1779 Use of uninitialized value in addition (+) at - line 4.
1780 ########
1781 use warnings 'uninitialized';
1782 my $nofile = '/no/such/file';
1783 my $v;
1784 $v = 1 + (-f $nofile);
1785 EXPECT
1786 Use of uninitialized value in addition (+) at - line 4.
1787 ########
1788 use warnings 'uninitialized';
1789 my $nofile = '/no/such/file';
1790 my $v;
1791 $v = 1 + (-d $nofile);
1792 EXPECT
1793 Use of uninitialized value in addition (+) at - line 4.
1794 ########
1795 use warnings 'uninitialized';
1796 my $nofile = '/no/such/file';
1797 my $v;
1798 $v = 1 + (-l $nofile);
1799 EXPECT
1800 Use of uninitialized value in addition (+) at - line 4.
1801 ########
1802 use warnings 'uninitialized';
1803 my $nofile = '/no/such/file';
1804 my $v;
1805 $v = 1 + (-p $nofile);
1806 EXPECT
1807 Use of uninitialized value in addition (+) at - line 4.
1808 ########
1809 use warnings 'uninitialized';
1810 my $nofile = '/no/such/file';
1811 my $v;
1812 $v = 1 + (-S $nofile);
1813 EXPECT
1814 Use of uninitialized value in addition (+) at - line 4.
1815 ########
1816 use warnings 'uninitialized';
1817 my $nofile = '/no/such/file';
1818 my $v;
1819 $v = 1 + (-b $nofile);
1820 EXPECT
1821 Use of uninitialized value in addition (+) at - line 4.
1822 ########
1823 use warnings 'uninitialized';
1824 my $nofile = '/no/such/file';
1825 my $v;
1826 $v = 1 + (-c $nofile);
1827 EXPECT
1828 Use of uninitialized value in addition (+) at - line 4.
1829 ########
1830 use warnings 'uninitialized';
1831 my $nofile = '/no/such/file';
1832 my $v;
1833 $v = 1 + (-t $nofile);
1834 EXPECT
1835 Use of uninitialized value in addition (+) at - line 4.
1836 ########
1837 use warnings 'uninitialized';
1838 my $nofile = '/no/such/file';
1839 my $v;
1840 $v = 1 + (-u $nofile);
1841 EXPECT
1842 Use of uninitialized value in addition (+) at - line 4.
1843 ########
1844 use warnings 'uninitialized';
1845 my $nofile = '/no/such/file';
1846 my $v;
1847 $v = 1 + (-g $nofile);
1848 EXPECT
1849 Use of uninitialized value in addition (+) at - line 4.
1850 ########
1851 use warnings 'uninitialized';
1852 my $nofile = '/no/such/file';
1853 my $v;
1854 $v = 1 + (-T $nofile);
1855 EXPECT
1856 Use of uninitialized value in addition (+) at - line 4.
1857 ########
1858 use warnings 'uninitialized';
1859 my $nofile = '/no/such/file';
1860 my $v;
1861 $v = 1 + (-B $nofile);
1862 EXPECT
1863 Use of uninitialized value in addition (+) at - line 4.
1864 ########
1865 use warnings 'uninitialized';
1866 my $nofile = '/no/such/file';
1867 my $v;
1868 $v = 1 + (-M $nofile);
1869 EXPECT
1870 Use of uninitialized value in addition (+) at - line 4.
1871 ########
1872 use warnings 'uninitialized';
1873 my $nofile = '/no/such/file';
1874 my $v;
1875 $v = 1 + (-A $nofile);
1876 EXPECT
1877 Use of uninitialized value in addition (+) at - line 4.
1878 ########
1879 use warnings 'uninitialized';
1880 my $nofile = '/no/such/file';
1881 my $v;
1882 $v = 1 + (-C $nofile);
1883 EXPECT
1884 Use of uninitialized value in addition (+) at - line 4.
1885 ########
1886 use warnings 'uninitialized';
1887 my $nofile = '/no/such/file';
1888 my $v;
1889 $v = 1 + eval { readlink $nofile };
1890 EXPECT
1891 Use of uninitialized value in addition (+) at - line 4.
1892 ########
1893 use warnings 'uninitialized';
1894 my $nofile = '/no/such/file';
1895 my $v;
1896 $v = 1 + opendir($f, $nofile);
1897 EXPECT
1898 Use of uninitialized value in addition (+) at - line 4.
1899 ########
1900 use warnings 'uninitialized';
1901 my $nofile = '/no/such/file';
1902 my $v;
1903 $v = 1 + undef;
1904 EXPECT
1905 Use of uninitialized value in addition (+) at - line 4.
1906 ########
1907 use warnings 'uninitialized';
1908 my $nofile = '/no/such/file';
1909 my $v;
1910 my $x = 1; $v = 1 + undef($x);
1911 EXPECT
1912 Use of uninitialized value in addition (+) at - line 4.
1913 ########
1914 use warnings 'uninitialized';
1915 my $v;
1916 my $emptys = "";
1917 $v = 1 + substr($emptys,2,1);
1918 EXPECT
1919 Use of uninitialized value in addition (+) at - line 4.
1920 ########
1921 use warnings 'uninitialized';
1922 my $v;
1923 my @emptya;
1924 $v = 1 + each @emptya;
1925 EXPECT
1926 Use of uninitialized value in addition (+) at - line 4.
1927 ########
1928 use warnings 'uninitialized';
1929 my $v;
1930 my %emptyh;
1931 $v = 1 + each %emptyh;
1932 EXPECT
1933 Use of uninitialized value in addition (+) at - line 4.
1934 ########
1935 use warnings 'uninitialized';
1936 my $v;
1937 my @emptya;
1938 $v = 1 + sort @emptya;
1939 EXPECT
1940 Use of uninitialized value in addition (+) at - line 4.
1941 ########
1942 use warnings 'uninitialized';
1943 my $v;
1944 my $zero = 0; $v = 1 + caller($zero);
1945 EXPECT
1946 Use of uninitialized value in addition (+) at - line 3.
1947 ########
1948 use warnings 'uninitialized';
1949 my $nofile = '/no/such/file';
1950 my $v;
1951 $v = 1 + do $nofile;
1952 EXPECT
1953 Use of uninitialized value in addition (+) at - line 4.
1954 ########
1955 use warnings 'uninitialized';
1956 my $v;
1957 my $fn = sub {};
1958 $v = 1 + prototype $fn;
1959 EXPECT
1960 Use of uninitialized value in addition (+) at - line 4.
1961 ########
1962 use warnings 'uninitialized';
1963 my $v;
1964 my $fn = sub {};
1965 $v = 1 + (1 ~~ $fn);
1966 EXPECT
1967 Use of uninitialized value in addition (+) at - line 4.
1968 ########
1969 use warnings 'uninitialized';
1970 my $v;
1971 my $f = "";
1972 $v = 1 + (print STDIN $f); # print to STDIN returns undef
1973 EXPECT
1974 Use of uninitialized value in addition (+) at - line 4.
1975 ########
1976 use warnings 'uninitialized';
1977 my $v;
1978 my $f = "";
1979 $v = 1 + (printf STDIN "%s", $f);
1980 EXPECT
1981 Use of uninitialized value in addition (+) at - line 4.
1982 ########
1983 use warnings 'uninitialized';
1984 my $v;
1985 my $f = "";
1986 { use feature 'say'; $v = 1 + (say STDIN "%s", $f); }
1987 EXPECT
1988 Use of uninitialized value in addition (+) at - line 4.
1989 ########
1990 use warnings 'uninitialized';
1991 my $v;
1992 my $f = "";
1993 $v = 1 + (unpack("",$f));
1994 EXPECT
1995 Use of uninitialized value in addition (+) at - line 4.
1996 ########
1997 use warnings 'uninitialized';
1998 my $nofile = '/no/such/file';
1999 my $v;
2000 my $f = "";
2001 $v = 1 + sysopen($f, $nofile, 0);
2002 EXPECT
2003 Use of uninitialized value in addition (+) at - line 5.
2004 ########
2005 use warnings 'uninitialized';
2006 my $v;
2007 { my $x = -1; $v = 1 + sysseek(DATA, $x, 0); }
2008 __END__
2009 EXPECT
2010 Use of uninitialized value in addition (+) at - line 3.
2011 ########
2012 use warnings 'uninitialized';
2013 delete $::{'Foo::'};
2014 my $moo = $Foo::BAR + 42;
2015 __END__
2016 EXPECT
2017 Use of uninitialized value in addition (+) at - line 3.
2018 ########
2019 use warnings 'uninitialized';
2020 use constant {u=>undef, v=>undef};
2021 sub foo () {u}
2022 sub foo () {v}
2023 EXPECT
2024 ########
2025 # [perl #72090]
2026 use warnings 'uninitialized';
2027 $a = @$a > 0;
2028 EXPECT
2029 Use of uninitialized value $a in array dereference at - line 3.
2030 Use of uninitialized value in numeric gt (>) at - line 3.
2031 ########
2032 # [perl #103766]
2033 use warnings 'uninitialized';
2034 "@{[ $x ]}";
2035 EXPECT
2036 Use of uninitialized value in join or string at - line 3.