Aside from the reliance on a predictably-named constructor (->new), this also implicitly assumes single inheritance. I'm not sure that there's any practical way to get all the ancestors in a multiple-inheritance scenario other than iterating the @ISAs.