DAPM 4/2004.
Test the appearance of variable names in "Use of uninitialized value"
warnings.
The following ops aren't tested, mainly because they do IO or non-portable
stuff:
send recv bind conect listen accept shutdown chdir chown chroot unlink
chmod utime rename link symlink readlink mkdir rmdir opendir seekdir
system exec kill getpgrp alarm sleep dofile require gethostbyname
gethostbyaddr getnetbyname getnetbyaddr getprotobyname getprotobynumber
getservbyname getservbyport sethostent setnetent setprotoent setservent
getpwnam getpwuid getgrnam getgrgid waitpid setpgrp setpriority
getpriority syscall ioctl fcntl truncate getsockopt setsockopt
semctl semop semget msgget msgctl msgsnd msgrcv shmget shmctl shmread
shmwrite
---------------------------------------------------
__END__
use warnings 'uninitialized';
my ($m1, $m2, $v);
$v = $m1 + 10;
$v = 22 + $m2;
$v = $m1 + $m2;
EXPECT
Use of uninitialized value $m1 in addition (+) at - line 4 character 10.
Use of uninitialized value $m2 in addition (+) at - line 5 character 9.
Use of uninitialized value $m2 in addition (+) at - line 6 character 10.
Use of uninitialized value $m1 in addition (+) at - line 6 character 10.
########
use warnings 'uninitialized';
my ($m1, $v);
our ($g1, $g2);
$v = $g1 + 21;
$v = 31 + $g2;
$v = $g1 + $g2;
$v = $m1 + $g2;
EXPECT
Use of uninitialized value $main::g1 in addition (+) at - line 5 character 10.
Use of uninitialized value $main::g2 in addition (+) at - line 6 character 9.
Use of uninitialized value $main::g2 in addition (+) at - line 7 character 10.
Use of uninitialized value $main::g1 in addition (+) at - line 7 character 10.
Use of uninitialized value $main::g2 in addition (+) at - line 8 character 10.
Use of uninitialized value $m1 in addition (+) at - line 8 character 10.
########
use warnings 'uninitialized';
my ($m1, @ma, $v);
$v = @ma[?5] + 45;
$v = 56 + @ma[?6];
$v = @ma[?7] + $m1;
$v = @ma[?8] + @ma[?9];
$v = @ma[?-1] + @ma[?-2];
EXPECT
Use of uninitialized value @ma[5] in addition (+) at - line 4 character 14.
Use of uninitialized value @ma[6] in addition (+) at - line 5 character 9.
Use of uninitialized value $m1 in addition (+) at - line 6 character 14.
Use of uninitialized value in addition (+) at - line 6 character 14.
Use of uninitialized value in addition (+) at - line 7 character 14.
Use of uninitialized value in addition (+) at - line 7 character 14.
Use of uninitialized value in addition (+) at - line 8 character 15.
Use of uninitialized value in addition (+) at - line 8 character 15.
########
use warnings 'uninitialized';
my ($v);
our (@ga);
$v = @ga[?8] + 21;
$v = @ga[?-8] + 46;
$v = 57 + @ga[?9];
$v = 58 + @ga[?-9];
$v = @ga[?10] + @ga[?11];
$v = @ga[?-10] + @ga[?-11];
EXPECT
Use of uninitialized value @main::ga[8] in addition (+) at - line 5 character 14.
Use of uninitialized value @main::ga[-8] in addition (+) at - line 6 character 15.
Use of uninitialized value @main::ga[9] in addition (+) at - line 7 character 9.
Use of uninitialized value @main::ga[-9] in addition (+) at - line 8 character 9.
Use of uninitialized value in addition (+) at - line 9 character 15.
Use of uninitialized value in addition (+) at - line 9 character 15.
Use of uninitialized value in addition (+) at - line 10 character 16.
Use of uninitialized value in addition (+) at - line 10 character 16.
########
use warnings 'uninitialized';
my ($v);
our @gau = @(undef) x 258 ;
our %ghu = %('foo', undef, 'bar', undef);
$v = @gau[8] + 46;
$v = @gau[-8] + 47;
$v = 57 + @gau[9];
$v = 57 + @gau[-9];
$v = @gau[10] + @gau[11];
$v = @gau[256] + @gau[257];
$v = @gau[-1] + @gau[-2];
$v = %ghu{foo} + %ghu{bar};
EXPECT
Use of uninitialized value @main::gau[8] in addition (+) at - line 6 character 14.
Use of uninitialized value @main::gau[-8] in addition (+) at - line 7 character 15.
Use of uninitialized value @main::gau[9] in addition (+) at - line 8 character 9.
Use of uninitialized value @main::gau[-9] in addition (+) at - line 9 character 9.
Use of uninitialized value @main::gau[11] in addition (+) at - line 10 character 15.
Use of uninitialized value @main::gau[10] in addition (+) at - line 10 character 15.
Use of uninitialized value @main::gau[257] in addition (+) at - line 11 character 16.
Use of uninitialized value @main::gau[256] in addition (+) at - line 11 character 16.
Use of uninitialized value @main::gau[-2] in addition (+) at - line 12 character 15.
Use of uninitialized value @main::gau[-1] in addition (+) at - line 12 character 15.
Use of uninitialized value %main::ghu{"bar"} in addition (+) at - line 13 character 16.
Use of uninitialized value %main::ghu{"foo"} in addition (+) at - line 13 character 16.
########
use warnings 'uninitialized';
my ($v);
our @gau = @(undef) x 258 ;
our %ghu = %('foo', undef, 'bar', undef);
my @mau = @(undef) x 258 ;
my %mhu = %('foo', undef, 'bar', undef);
my $i1 = 10;
my $i2 = 20;
my $i3 = 2000;
my $k1 = 'foo';
my $k2 = 'bar';
my $k3 = 'baz';
$v = @mau[$i1] + @mau[$i2];
$v = @gau[$i1] + @gau[$i2];
$v = @gau[$i1] + @gau[?$i3];
$v = %mhu{$k1} + %mhu{$k2};
$v = %ghu{$k1} + %ghu{$k2};
$v = %ghu{$k1} + %ghu{?$k3};
EXPECT
Use of uninitialized value @mau[20] in addition (+) at - line 14 character 16.
Use of uninitialized value @mau[10] in addition (+) at - line 14 character 16.
Use of uninitialized value @main::gau[20] in addition (+) at - line 15 character 16.
Use of uninitialized value @main::gau[10] in addition (+) at - line 15 character 16.
Use of uninitialized value in addition (+) at - line 16 character 16.
Use of uninitialized value @main::gau[10] in addition (+) at - line 16 character 16.
Use of uninitialized value %mhu{"bar"} in addition (+) at - line 17 character 16.
Use of uninitialized value %mhu{"foo"} in addition (+) at - line 17 character 16.
Use of uninitialized value %main::ghu{"bar"} in addition (+) at - line 18 character 16.
Use of uninitialized value %main::ghu{"foo"} in addition (+) at - line 18 character 16.
Use of uninitialized value in addition (+) at - line 19 character 16.
Use of uninitialized value %main::ghu{"foo"} in addition (+) at - line 19 character 16.
########
use warnings 'uninitialized';
my ($m1, $m2, @ma, %mh, $v);
our ($g1, $g2, @ga, %gh);
$v = @ma[?$m1];
$v = @ma[?$g1];
$v = @ga[?$m2];
$v = @ga[?$g2];
$v = %mh{?$m1};
$v = %mh{?$g1};
$v = %gh{?$m2};
$v = %gh{?$g2};
$v = $m1+($m2-$g1);
$v = @ma[?@ga[?3]];
$v = @ga[?@ma[?4]];
EXPECT
Use of uninitialized value $m1 in array element at - line 5 character 9.
Use of uninitialized value $main::g1 in array element at - line 6 character 9.
Use of uninitialized value $m2 in array element at - line 7 character 9.
Use of uninitialized value $main::g2 in array element at - line 8 character 9.
Use of uninitialized value $m1 in hash element at - line 10 character 9.
Use of uninitialized value $main::g1 in hash element at - line 11 character 9.
Use of uninitialized value $m2 in hash element at - line 12 character 9.
Use of uninitialized value $main::g2 in hash element at - line 13 character 9.
Use of uninitialized value $main::g1 in subtraction (-) at - line 15 character 14.
Use of uninitialized value $m2 in subtraction (-) at - line 15 character 14.
Use of uninitialized value $m1 in addition (+) at - line 15 character 9.
Use of uninitialized value @main::ga[3] in array element at - line 16 character 9.
Use of uninitialized value @ma[4] in array element at - line 17 character 9.
########
use warnings 'uninitialized';
my (@ma, %mh, $v);
our (@ga, %gh);
$v = sin @ga[?1000];
$v = sin @ma[?1000];
$v = sin %gh{?foo};
$v = sin %mh{?bar};
$v = sin @ga[?$^PID];
$v = sin @ma[?$^PID];
$v = sin %gh{?$^PID};
$v = sin %mh{?$^PID};
EXPECT
Use of uninitialized value @main::ga[1000] in sin at - line 5 character 6.
Use of uninitialized value @ma[1000] in sin at - line 6 character 6.
Use of uninitialized value %main::gh{"foo"} in sin at - line 7 character 6.
Use of uninitialized value %mh{"bar"} in sin at - line 8 character 6.
Use of uninitialized value within @main::ga in sin at - line 10 character 6.
Use of uninitialized value within @ma in sin at - line 11 character 6.
Use of uninitialized value within %main::gh in sin at - line 12 character 6.
Use of uninitialized value within %mh in sin at - line 13 character 6.
########
use warnings 'uninitialized';
my ($m1, $m2);
our ($g1, @ga);
print $^STDOUT, @ga[?1000];
print $^STDERR, @ga[?1000];
print $^STDERR, $m1, $g1, @ga[?1],$m2;
print $^STDERR, "", @ga[?1],"";
EXPECT
Use of uninitialized value @main::ga[1000] in print at - line 5 character 1.
Use of uninitialized value @main::ga[1000] in print at - line 6 character 1.
Use of uninitialized value $m1 in print at - line 7 character 1.
Use of uninitialized value $main::g1 in print at - line 7 character 1.
Use of uninitialized value in print at - line 7 character 1.
Use of uninitialized value $m2 in print at - line 7 character 1.
Use of uninitialized value @main::ga[1] in print at - line 8 character 1.
########
use warnings 'uninitialized';
my ($m1);
our ($g1);
close $m1; # exercises rv2gv
close $g1; # exercises rv2gv
EXPECT
Can't use an undefined value as a symbol reference at - line 5 character 7.
########
use warnings 'uninitialized';
my ($m1, $m2, $v);
our ($g1, $g2);
$v = $m1 ^|^ $m2;
$v = $m1 ^&^ $m2;
$v = $m1 ^^^ $m2;
$v = ^~^$m1;
$v = $g1 ^|^ $g2;
$v = $g1 ^&^ $g2;
$v = $g1 ^^^ $g2;
$v = ^~^$g1;
EXPECT
Use of uninitialized value $m1 in bitwise or (^|^) at - line 5 character 10.
Use of uninitialized value $m2 in bitwise or (^|^) at - line 5 character 10.
Use of uninitialized value $m1 in bitwise and (^&^) at - line 6 character 10.
Use of uninitialized value $m2 in bitwise and (^&^) at - line 6 character 10.
Use of uninitialized value $m1 in bitwise xor (^^^) at - line 7 character 10.
Use of uninitialized value $m2 in bitwise xor (^^^) at - line 7 character 10.
Use of uninitialized value $m1 in 1's complement (^~^) at - line 8 character 6.
Use of uninitialized value $main::g1 in bitwise or (^|^) at - line 10 character 10.
Use of uninitialized value $main::g2 in bitwise or (^|^) at - line 10 character 10.
Use of uninitialized value $main::g1 in bitwise and (^&^) at - line 11 character 10.
Use of uninitialized value $main::g2 in bitwise and (^&^) at - line 11 character 10.
Use of uninitialized value $main::g1 in bitwise xor (^^^) at - line 12 character 10.
Use of uninitialized value $main::g2 in bitwise xor (^^^) at - line 12 character 10.
Use of uninitialized value $main::g1 in 1's complement (^~^) at - line 13 character 6.
########
use warnings 'uninitialized';
my ($v);
my $tmp1; $v = $tmp1++; # (doesn't warn)
our $tmp2; $v = $tmp2++; # (doesn't warn)
my $tmp3; $v = ++$tmp1; # (doesn't warn)
our $tmp4; $v = ++$tmp2; # (doesn't warn)
my $tmp5; $v = $tmp5--; # (doesn't warn)
our $tmp6; $v = $tmp6--; # (doesn't warn)
my $tmp7; $v = --$tmp7; # (doesn't warn)
our $tmp8; $v = --$tmp8; # (doesn't warn)
EXPECT
########
use warnings 'uninitialized';
my $s1; chomp $s1;
my $s2; chop $s2;
EXPECT
Use of uninitialized value $s1 in chomp at - line 3 character 9.
Use of uninitialized value $s2 in chop at - line 4 character 9.
########
use warnings 'uninitialized';
my ($m1, @ma, %mh);
our ($g1);
delete @ma[$m1];
delete @ma[[@($m1, $g1)]];
delete %mh{$m1};
delete %mh{[@($m1, $g1)]};
EXPECT
Use of uninitialized value $m1 in delete at - line 5 character 1.
Use of uninitialized value in delete at - line 6 character 1.
Use of uninitialized value in delete at - line 6 character 1.
Use of uninitialized value $m1 in delete at - line 7 character 1.
Use of uninitialized value in delete at - line 8 character 1.
Use of uninitialized value in delete at - line 8 character 1.