Chapter 9. Objects with Data
Using the simple syntax introduced in Chapter 8, you have class methods, (multiple) inheritance, overriding, and extending. You’ve been able to factor out common code and provide a way to reuse implementations with variations. This is at the core of what objects provide, but objects also provide instance data, which we haven’t even begun to cover.
A Horse Is a Horse, of Course of Course—or Is It?
Let’s
look at the code used in Chapter 8 for the
Animal
classes and Horse
classes:
{ package Animal; sub speak { my $class = shift; print "a $class goes ", $class->sound, "!\n" } } { package Horse; @ISA = qw(Animal); sub sound { "neigh" } }
This lets you invoke Horse->speak
to ripple
upward to Animal::speak
, calling back to
Horse::sound
to get the specific sound, and the
output of:
a Horse goes neigh!
But all Horse
objects would have to be absolutely
identical. If you add a subroutine, all horses automatically share
it. That’s great for making horses identical, but
how do you capture the properties of an individual horse? For
example, suppose you want to give your horse a name.
There’s got to be a way to keep its name separate
from those of other horses.
You can do so by establishing an instance. An instance is generally created by a class, much like a car is created by a car factory. An instance will have associated properties, called instance variables (or member variables, if you come from a C++ or Java background). An instance has a unique identity (like the serial ...
Get Learning Perl Objects, References, and Modules now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.