Class::Trait->apply( $some_class, $some_trait ); my $build_class_sub = $some_trait->can('build_class'); $build_class_sub->($some_class); #### sub build_class { my ($class) = @_; $class->mk_accessors( qw(smb_hostname) ); $class->mk_accessors( qw(smb_username) ); ... } #### sub build_class { my ($class) = @_; my $destructor = sub { my ($this) = @_; delete $is_selected{ get_obj_id($this) }; }; $class->register_destructor($destructor); } #### sub logpath { my ($this) = @_; return File::Spec->rel2abs( join( '-', split /::/, __PACKAGE__ ) . '.log', $this->log_root ); } #### sub preapply { my ($class) = @_; *logpath = sub { my ($this) = @_; return File::Spec->rel2abs( join( '-', split /::/, $class ) . '.log', $this->log_root ); }; }