Generally speaking, objects should be opaque to the outside world. However, there are times that we need to know what we're working with. For example, the debugger problem means that Data::Dumper and friends would need some way of realizing that "hey, I can get useful state information for this thing".
There's also the question of what ref and Scalar::Util::reftype will return.