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.