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プラグマ謎い。。。