Because if you disable warnings, it silently coerces 'foo' to 0.
This is why disciplined (i.e. non-tiny-script-y) perl code starts off with
use strict;
use warnings;
just like disciplined javascript starts off with
/* use strict */
and disciplined C code enables compiler warnings, and truly disciplined C code makes those fatal, just like in perl you can do
use warnings FATAL => 'all';
If you don't do that, then you get the short script/one liner style behaviour where, just like sed, awk or bash, it assumes you know what you're doing. If you don't, then you should be asking the VM to help tell you when those problems exist, same as 'set -x' in bash is incredibly useful if you don't plan to add '|| exit 255;' onto the end of every command.