package Parent_object; sub new { my $O = bless {}, shift; $O->{'attribute-1'} = "value 1"; $O->{'attribute-2'} = "value 2"; $O->{'attribute-3'} = "value 3"; [...] return ($O); } #### package Parent_object; sub new { my $O = bless {}, shift; $O->{'data'} = _fill_attributes (@_); return ($O); } sub _fill_attributes { my $result = {}; $result->{'attribute-1'} = $_[0]; $result->{'attribute-2'} = $_[1]; $result->{'attribute-3'} = $_[2]; [....] return ($result); } #### package Parent_object; [...] sub do_something { my $O = shift; my $f = $O->{'sub-function-for-this-case'}; $f->($O); return ([whatever]); } #### package Parent_object; [...] sub do_something { my $O = shift; my $f = $O->{'sub-function-for-this-case'}; $f->($O->{'data'}); return ([whatever]); }