I don't think that you will build the methods for all subclasses, because AUTOLOAD is defined in the base class, so $AUTOLOAD is actually $base::AUTOLOAD, not $sub::AUTOLOAD. Therefore what your function does is install the method in the scope of the base class (and when it is called the next time from a subclass, the method already exists in the inheritance tree).