Within the scope of use strict qw(subs vars) the once warning is about a hundred times more annoying than it is useful.
void and uninitialized are also of questionable value, and although the idea of numeric warnings is good, the details are silly...
use feature qw(say);
use warnings qw(numeric);
my $foo = ""; say $foo+1; # why does this warn,
my $bar = []; say $bar+1; # when this does not?
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'