I'll have to think about the rest of your proposal, but I was suddenly struck with the thought that our "platonic" Class objects are really forms of undef:
say defined IO; # prints 0 That is, we already have an object of type IO that doesn't really have a value yet. And maybe that's the real difference between the class object and the metaclass object. And maybe we can reason about objects of type IO without worrying about the definedness, if all classes already include their own personal undef. Larry