around BUILDARGS => sub { my $orig = shift; my $class = shift; ... return $class->$orig(...); }; #### sub new { my $class = shift; ... return $class->SUPER::new(...); } #### has attr => ( reader => '_get_attr', writer => '_set_attr', handles => { get_attr => sub { ... }, set_attr => sub { ... }, }, )