package ClassOne; sub new { my ($class, %args) = @_; #... my $data = $class->load_a_bunch_of_data($arg{one}); return bless $data, $class; } use ClassThreeList; sub load_a_bunch_of_data { my ($class, $arg1) = @_; # load a bunch of data that only ClassOne cares about # ... # load a list of data that both ClassOne # and ClassTwo care about. my $item_list = ClassThreeList->load_where(objectlistid => $arg1); foreach my $item (@$item_list) { ### BEGIN CODE THAT I WANT TO SHARE ### $item->load_attr1_list; $item->load_attr2_list; $item->calculate_some_attribute. $item->etc; ### END CODE THAT I WANT TO SHARE ### } } # ClassTwo does not exist yet.