David B David B - 1 year ago 54
Perl Question

How should I define 'static' subroutines in Perl?

I'm used to work in Java, so perhaps this question is a Java-oriented Perl question... anyway, I've created a

package using

Now, I would like to add a few subroutines which are "static", that is, they do not refer to a specific
, but are still closely related to
package. For example,
sub sort_persons
gets an array of

In Java, I would simply declare such functions as
. But in Perl... what is the common way to do that?

p.s. I think the Perlish terminology for what I'm referring to is "class methods".

Answer Source

There's no such thing as a static method in Perl. Methods that apply to the entire class are conventionally called class methods. These are only distinguished from instance methods by the type of their first argument (which is a package name, not an object). Constructor methods, like new() in most Perl classes, are a common example of class methods.

If you want a particular method to be invoked as a class method only, do something like this:

sub class_method {
    my ($class, @args) = @_;
    die "class method invoked on object" if ref $class;
    # your code