sub instance_method {
my $self = shift;
my($one, $two, $three) = @_;
# do stuff
}
Here is an example of a constructor creating a new object and
returning a reference:
$tri = Triangle::Right->new(side1 => 3, side2 => 4);
This example creates a new right-triangle object and references it
with $tri. The parameters are given as a
hash-style list. This is common for constructors, since they set
initial parameters for an object that is probably just a hash. Now
that we have an object, we can invoke a method on it. Suppose
Triangle::Right defines a method, hypot, that
returns the length of the hypotenuse for a given right-triangle
object. It would be used like this:
$h = $tri->hypot;
print "The hypotenuse is: $h.\n";
In this particular example, there happens to be no additional
arguments to the hypot method, but there could
have been.
$obj->method(args)
CLASS->method(args)
You have to use parentheses because this form can't
be used as a list operator, although the first type of method syntax
can.
The examples given above would look like this using the arrow syntax:
$tri = Triangle::Right->new(side1 => 3, side2 => 4);
$h = $tri->hypot( );
print "The hypotenuse is: $h.\n";
The arrow syntax provides a helpful visual relationship between the
object and its method, but both forms of syntax do the same thing.
Precedence for the arrow syntax is left-to-right, exactly the same as
for the dereferencing operator. This allows you to chain together
objects and methods if you want to simplify things. You just have to
make sure you have an object to the left of the arrow and a method to
the right:
%sides = (side1 => 3, side2 => 4);
$h = Triangle::Right->new(%sides)->hypot( );
print "The hypotenuse is: $h.\n";
In this example, you never assign a variable name to the
right-triangle object; the reference is passed directly to the
hypot method.
 |  |  |
7.3. Object-Oriented Perl |  | 8. Standard Modules |