{ package Meteoalarm; sub new { my ($class, %args) = @_; my $self = bless({}, $class); $self->{ua} = _make_ua(); return $self; } sub _make_ua { return LWP::UserAgent->new( ... ); } sub get_warnings { my ($self) = @_; my $ua = $self->{ua}; ... my %by_country; for (...) { ... $by_country{$country} = \%warning; } return \%by_country; } } #### { package Meteoalarm; sub new { my ($class, %args) = @_; my $self = bless({}, $class); $self->{ua} = _make_ua(); return $self; } sub _make_ua { return LWP::UserAgent->new( ... ); } sub fetch { my ($self) = @_; my $ua = $self->{ua}; ... my @countries; for (...) { ... push @countries, Meteoalarm::Country->new( name => $country, warnings => \%warnings, ); } return \@countries; } } { package Meteoalarm::Country; sub new { my ($class, %args) = @_; my $self = bless({}, $class); $self->{name } = $args{name }; $self->{warnings} = $args{warnings}; return $self; } sub name { shift->{name } } sub warnings { shift->{warnings} } }