package Passenger; use v5.22; use strict; use warnings; # class attributes my @required = (); # class methods sub define_required_items { my $class = shift; @required = @_; } sub new { my $class = shift; my $self = { @_ }; bless ($self, $class); $self->_init; return $self; } # public object methods sub get_name { my $self = shift; return $self->{name}; } sub provision { my ( $self, @provisions ) = @_; push @{ $self->{provisions} } => @provisions; } sub check_required_provisions { my $self = shift; my @items = @{ $self->_get_provisions }; my @missing = ( ); foreach my $item (@required) { unless (grep $item eq $_, @items) { print $self->get_name, " is missing $item\n"; push @missing => $item; } } if (@missing) { print "Adding @missing to @items for ", $self->get_name, "\n"; $self->provision( @missing ); } } sub print_provisions { my $self = shift; foreach my $item (@{ $self->_get_provisions }) { print "\t$item\n"; } } # private object methods sub _init { my $self = shift; $self->{provisions} = []; } sub _get_provisions { my $self = shift; return $self->{provisions}; } 1; # End of Passenger