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. |