package Widget; sub new { my ( $class, %params ) = @_; # etc } sub get_color { ... } #### package Container; sub new { ... } sub load_widgets { my ( $self, $filename ) = @_; open( my $infh, '<', $filename ) or croak "..."; while( my $line = <$infh> ) { # parse data my $widget_object = Widget->new( %params ); $self->{_Container}{$id} = $widget_object; } } sub get_widgets_by_color { my ( $self, $color ) = @_; # etc }