in reply to getting 2 things done at once with Class::Base

This technique is heavily used in DBI internals. Look at any DBD and you'll see lots of things like:
return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'" );
which sets the error to be acted on by RaiseError or PrintError or called explicitly with $h->errstr() and then returns undef.