Passenger.pm (1292B) - raw
1 package Passenger; 2 3 use v5.22; 4 use strict; 5 use warnings; 6 7 # class attributes 8 my @required = (); 9 10 # class methods 11 sub define_required_items { 12 my $class = shift; 13 @required = @_; 14 } 15 16 sub new { 17 my $class = shift; 18 my $self = { @_ }; 19 bless ($self, $class); 20 $self->_init; 21 return $self; 22 } 23 24 # public object methods 25 sub get_name { 26 my $self = shift; 27 return $self->{name}; 28 } 29 30 sub provision { 31 my ( $self, @provisions ) = @_; 32 push @{ $self->{provisions} } => @provisions; 33 } 34 35 sub check_required_provisions { 36 my $self = shift; 37 my @items = @{ $self->_get_provisions }; 38 my @missing = ( ); 39 40 foreach my $item (@required) { 41 unless (grep $item eq $_, @items) { 42 print $self->get_name, " is missing $item\n"; 43 push @missing => $item; 44 } 45 } 46 47 if (@missing) { 48 print "Adding @missing to @items for ", $self->get_name, "\n"; 49 $self->provision( @missing ); 50 } 51 } 52 53 sub print_provisions { 54 my $self = shift; 55 foreach my $item (@{ $self->_get_provisions }) { 56 print "\t$item\n"; 57 } 58 } 59 60 # private object methods 61 sub _init { 62 my $self = shift; 63 $self->{provisions} = []; 64 } 65 66 sub _get_provisions { 67 my $self = shift; 68 return $self->{provisions}; 69 } 70 71 72 1; # End of Passenger