in reply to Moose: mutualy exclusive bolean attributes.

There is also nothing on the _status attribute to prevent something accessing it directly and setting it to an invalid value

That shouldn't be a consideration because you'll never be able to prevent someone from going around the normal process. For example,

$obj->{'_status'} = 'junk';