use 5.16.2; use warnings FATAL => qw( all ); package movie; sub new { my $class = shift; my %params = @_; my $self = bless {}, $class; $self->title($params{title}); $self->startyear($params{startyear}); $self->endyear($params{endyear}); $self->media($params{media}); $self->basedon($params{basedon}); $self->company($params{company}); return $self; } sub title { my $self = shift; my $title = shift; $self->{title} = $title if $title; return $self->{title}; } sub startyear { my $self = shift; my $startyear = shift; $self->{startyear} = $startyear if $startyear; return $self->{startyear}; } sub endyear { my $self = shift; my $endyear = shift; $self->{endyear} = $endyear if $endyear; return $self->{endyear}; } sub media { my $self = shift; my $media = shift; $self->{media} = $media if $media; return $self->{media}; } sub basedon { my $self = shift; my $basedon = shift; $self->{basedon} = $basedon if $basedon; return $self->{basedon}; } sub company { my $self = shift; my $company = shift; $self->{company} = $company if $company; return $self->{company}; } sub print { my $self = shift; say "I am a movie and my title is $self->{title}"; } package library; sub new { my $class = shift; my %params = @_; my $self = bless {}, $class; $self->name($params{name}); $self->add_movie($_) for @{$params{movies}}; return $self; } sub name { my $self = shift; my $name = shift; $self->{name} = $name if $name; return $self->{name}; } sub add_movie { my $self = shift; my $movie = shift; $self->{movies}{$movie->title()}{movie} = $movie; $self->{movies}{$movie->title()}{location} = 'in'; } sub print { my $self = shift; say "I am a library called '".$self->name()."' and contain the following movies:"; say "\t".$_->{movie}->title() foreach values %{$self->{movies}}; } package main; my %movies_data = ( 'Firefly' => { 'title' => 'Firefly', 'startyear' => '2002', 'endyear' => '2003', 'media' => 'tv', }, 'Criminal Minds' => { 'title' => 'Criminal Minds', 'startyear' => '2005', 'endyear' => 'tbd', 'media' => 'tv', }, 'The 10th Kingdom' => { 'title' => 'The 10th Kingdom', 'startyear' => '2000', 'endyear' => '', 'media' => 'miniseries', }, 'Iron Man' => { 'title' => 'Iron Man', 'startyear' => '2008', 'endyear' => '', 'media' => 'film', 'basedon' => 'comics', 'company' => 'Marvel Comics', }, 'Tin Man' => { 'start year' => '2007', 'title' => 'Tin Man', 'media' => 'miniseries', 'basedon' => 'novel', 'company' => 'L. Frank Baum' }, 'The Avengers (1998)' => { 'title' => 'The Avengers (1998)', 'startyear' => '1998', 'media' => 'film', 'basedon' => 'television series', 'company' => 'Thames Television', }, ); my $library = library->new(name => "Lucky's"); foreach my $movie (values %movies_data) { $library->add_movie(movie->new(%$movie)); } $library->print();