undefined valueのwarningsに疑問を感じったー
先日、コードの書き直しが必要になった際に文字列結合演算子を消し忘れ、
my $foo .= 'bar';
みたいなコードになっていたのですが、いつものwarningsが出ないので
いろいろと試してみましたよっと
#!/usr/bin/perl use strict; use warnings; use lib q{.}; use Hoge; print "Case:1$/"; my $foo; $foo++; print $/; print "Case:2$/"; my $foo; ++$foo; print $/; print "Case:3$/"; my $foo .= 'bar'; print $/; print "Case:4$/"; my $bar; my $foo .= $bar; print $/; print "Case:5$/"; my $bar; my $foo . $bar; print $/; print "Case:6$/"; my $foo .= Hoge->new(); print $/; print "Case:7$/"; scalar(my $foo); print $/; print "Case:8$/"; length(my $foo); print $/; print "Case:9$/"; int(my $foo); print $/; print "Case:10$/"; ref(my $foo); print $/; print "Case:11$/"; lc(my $foo); print $/; print "Case:12$/"; uc(my $foo); print $/; print "Case:13$/"; select(my $foo); select STDOUT; print $/; print "Case:14$/"; my $foo eq my $bar; print $/; print "Case:15$/"; my $foo == my $bar; print $/; print "Case:16$/"; my $foo ne my $bar; print $/; print "Case:17$/"; my $foo != my $bar; print $/; print "Case:18$/"; my $foo > 1; print $/; print "Case:19$/"; my $foo < 1; print $/; print "Case:20$/"; my $foo && my $bar; print $/; print "Case:21$/"; my $foo and 1; print $/; print "Case:20$/"; my $foo || my $bar; print $/; print "Case:21$/"; my $foo or 1; print $/; print "Case:22$/"; my $foo xor 1; print $/; print "Case:23$/"; my $foo >> 1; print $/; print "Case:24$/"; my $foo << 1; print $/; __END__
これの出力結果が
Case:1 Case:2 Case:3 Case:4 Use of uninitialized value in concatenation (.) or string at test.pl line 28. Case:5 Use of uninitialized value in concatenation (.) or string at test.pl line 33. Use of uninitialized value in concatenation (.) or string at test.pl line 33. Case:6 Case:7 Case:8 Use of uninitialized value in length at test.pl line 45. Case:9 Use of uninitialized value in int at test.pl line 49. Case:10 Case:11 Case:12 Case:13 Case:14 Use of uninitialized value in string eq at test.pl line 70. Use of uninitialized value in string eq at test.pl line 70. Case:15 Use of uninitialized value in numeric eq (==) at test.pl line 74. Use of uninitialized value in numeric eq (==) at test.pl line 74. Case:16 Use of uninitialized value in string ne at test.pl line 78. Use of uninitialized value in string ne at test.pl line 78. Case:17 Use of uninitialized value in numeric ne (!=) at test.pl line 82. Use of uninitialized value in numeric ne (!=) at test.pl line 82. Case:18 Use of uninitialized value in numeric gt (>) at test.pl line 86. Case:19 Use of uninitialized value in numeric lt (<) at test.pl line 90. Case:20 Case:21 Case:20 Case:21 Case:22 Case:23 Use of uninitialized value in right bitshift (>>) at test.pl line 114. Case:24 Use of uninitialized value in left bitshift (<<) at test.pl line 118.
warningsプラグマ謎い。。。