I too wanted to do this. being very new to Moose, I was a bit disappointed to find I could not easily have new return undef on failure.
But there is a way. Use overload to have your object stringify to the empty string, or overload the bool operator so that it is 0, when its invalid. Then you
can test it afterwards in the normal way. If you need to print an objects type use ref($x) in the normnal way.
Some slightly dd code can result like
my $x=Object::new();
$x or $x->printerror();
But you get used to that.