my $_added_columns = 0; sub add_column { my $self = shift; if ( ! $_added_columns++ ) { $self->_initialize_class(); } } #### my $_objects_created = 0; sub new { my $self = shift; if ( ! $_objects_created++ ) { $self->build_class(); } # construction continues } #### __PACKAGE__->initialize_class(); __PACKAGE__->add_column('name'); __PACKAGE__->add_column('address'); __PACKAGE__->build_class();