commit 2d0b39492e239fdb1799baee690e7c7829873f48
Author: Samir Parikh <noreply@samirparikh.com>
Date: Tue, 18 Jan 2022 01:36:58 +0000
initial commit
Diffstat:
3 files changed, 112 insertions(+), 0 deletions(-)
diff --git a/Passenger.pm b/Passenger.pm
@@ -0,0 +1,72 @@
+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
diff --git a/README.md b/README.md
@@ -0,0 +1,16 @@
+These two files represent what I have been learning about object-oriented
+programming in Perl. The basis for my education is comprised of the following
+sources:
+
+- "Intermediate Perl" by Randal L. Schwartz, brian d foy, Tom Phoenix
+ https://www.oreilly.com/library/view/intermediate-perl/0596102062/
+
+- "Beginning Perl" by Simon Cozens
+ https://www.perl.org/books/beginning-perl/
+
+- "Beginning Perl" by Curtis Poe
+ https://www.wiley.com/en-us/Beginning+Perl-p-9781118235638
+
+This module is my attempt of converting the examples given Chapter 4
+("Introduction to References") in "Intermediate Perl" from a procedural
+implementation to an object-oriented one.
diff --git a/check_provisions.pl b/check_provisions.pl
@@ -0,0 +1,24 @@
+use lib '.';
+use strict;
+use warnings;
+use Passenger;
+
+Passenger->define_required_items (
+ qw(preserver sunscreen water_bottle jacket)
+);
+
+my $skipper = Passenger->new (
+ name => 'Skipper',
+);
+
+$skipper->provision(
+ qw(blue_shirt hat jacket preserver sunscreen)
+);
+
+print $skipper->get_name(), " has the following items:\n";
+$skipper->print_provisions();
+
+$skipper->check_required_provisions();
+
+print $skipper->get_name(), " now has the following items:\n";
+$skipper->print_provisions();