Warnings report any detected issue but the code continues on doing what perl was best able to guess what should happen. Neither the join() function nor the print will "abort" on an undef. Perl just promotes undef to ''.
@f = qw(a b c d e f g h); $f[3] = undef;
print join('-', @f), $/;
__OUTPUT__
a-b-c--e-f-g-h