http://www.perlmonks.org?node_id=21717


in reply to Polymorphism?

Both autark's and crazyinsomniac's answers are what you're looking for, but just to clarify your question a bit, the term you're looking for isn't polymorphism.

Polymorphism generally refers to the ability to call the correct method on an object depending on its class. It also provides the ability to override methods in derived classes, and still be sure you're getting the one you want.

The term you're looking for is function overloading, which allows for functions of the same name in the same namespace to co-exist, provided they each have different prototypes. This can be achieved as mentioned above, by looking at @_ and if/elsif/else your way through it, or loop, or whatever you want.

What you -can't- do in perl is something like this:

sub blah($) { print "blah\n" } sub blah($$) { print "blah\n" }
This generates:
Prototype mismatch: sub main::blah ($) vs ($$) at test.pl line 3.
on perl 5.005_03 (someone correct me if the behavior is any different in 5.6).

So, in a sense, you can accomplish what you want to in perl, but not the way you can in other languages such as C++. What you're doing in perl doesn't fit the definition of function overloading, since it's actually calling the same function every time, instead of choosing a function to call based on parameters.

Replies are listed 'Best First'.
RE: Re: Polymorphism?
by merlyn (Sage) on Jul 10, 2000 at 00:56 UTC
      Wow! Inheritance-friendly overloading for Perl...

      Thanks for the tip, merlyn! :-)

      Russ

      P.S. CPAN seems to complain about inexact case. Try Multimethods for a temporary shortcut.