[Chapter 7] 7.3 Object-Oriented Perl
Author: Ellen Siever, Stephen Spainhour & Nathan Patwardhan
Date: 1999-07-02T01:40:33Z

#

| Chapter 7 Packages, Modules, and Objects |

## 7.3 Object-Oriented Perl

In Perl circles, modules and object-oriented programming are often spoken of in the same breath. But just because the programmer has written a package and a subroutine doesn't mean that the code is objectified.

A module that describes a class must contain a special subroutine to create an object. (Each object that is created is an instance of a class.) This subroutine is called a constructor. (Often the constructor is named `new`, but `Create` is also used in Win32 classes.) The constructor creates a new object and returns a reference to it. This reference is a regular scalar variable, except that it refers to some underlying object that knows what class it belongs to. In your programs, you will use the reference to manipulate the object.

Methods are subroutines that expect an object reference as a first argument, such as:

>     sub in_class {
>        my $class = shift; # object reference
>        my ($this, $that) = @_; # params
>     }

Methods may be invoked like this:

>     PackageName->constructor(args)->method_name(args);

or:

>     $object = PackageName->constructor(args);
>     $object->method_name(args);

Objects have a specific set of available methods within their class, but they also inherit methods from their parent class, if they have one.

Objects are destroyed when the last reference to them goes away. You can control this capture before the object is destroyed with the `DESTROY` method. The `DESTROY` method should be defined somewhere in the class. You do not call `DESTROY` explicitly; it will be called at an appropriate time. Object references contained in the current object will be freed when the current object is freed. Most of the time you won't need to explicitly destroy an object, but there are occasions where you should, such as when you are done with a socket object.

7.2 Modules |  | 7.4 Object Syntax