sub my_init { my ($self, $args) = @_; # do stuff with $args; return { attr_1 => $attr_1, attr_2 => $attr_2 }; } sub new { my ($class, $args) = @_; my $self = {}; bless ($self, $class); my $attrs = $self->my_init($args); foreach (keys %$attrs) { $self->{$_} = $attrs->{$_}; } return $self; }