package Base; sub new { # Creates a new instance of the class } sub attrs { # When called as a class method, will keep track of attribute names } sub make_attr_subs { # Called by attrs() to create the mutators } -------------------- package Singleton; sub new { # Instead of creating a new instance, will return an already created one. } -------------------- package ReadOnly; sub make_attr_subs { # Instead of creating just a mutator, will create an accessor X() and a mutator _X(). }