in reply to changing moose object classes on the go
If I simply bless my $dog into LABRADOR then he won't be golden. How can I resolve this situation?
By creating a new LABRADOR object, and using it instead of the old object. You can reuse the attributes from the original DOG object.
Seriously, changing the type of an object is a an usual requirement, and might point to a flaw in your overall design. If a dog is a labrador, it's already born a labrador. Or phrased differently, time-dependent properties should not encoded in the type.