While there is no such operator as notdefined, the Logical Not - not defined would work for your case. That's because not unary operator is the equivalent of the ! operator(except for the precedence).
$
$ perl -le '$new="x"; if(defined($new) && ! defined($hostname)){print "ERROR: If using --new, you must define a hostname"}'
ERROR: If using --new, you must define a hostname
$
$ perl -le '$new="x"; if(defined($new) && not defined($hostname)){print "ERROR: If using --new, you must define a hostname"}'
ERROR: If using --new, you must define a hostname
$