intro-to-oop-perl

My introduction into Object-Oriented Programming using Perl
git clone git://git.samirparikh.com/intro-to-oop-perl
Log | Files | Refs | README

commit 2d0b39492e239fdb1799baee690e7c7829873f48
Author: Samir Parikh <noreply@samirparikh.com>
Date:   Tue, 18 Jan 2022 01:36:58 +0000

initial commit

Diffstat:
APassenger.pm | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AREADME.md | 16++++++++++++++++
Acheck_provisions.pl | 24++++++++++++++++++++++++
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();