Как мне определить "статические" подпрограммы в Perl?

Я привык работать на Java, поэтому, возможно, этот вопрос является Java-ориентированным Perl-вопросом... во всяком случае, я создал пакет Person, используя Moose.

Теперь я хотел бы добавить несколько подпрограмм, которые являются "статическими", то есть они не относятся к определенному Person, но все еще тесно связаны с пакетом Person. Например, sub sort_persons получает массив объектов Person.

В Java я просто объявлял бы такие функции, как static. Но в Perl... Каков общий способ сделать это?

p.s. Я думаю, что терминология Perlish, на которую я имею в виду, - это методы класса.

Ответы

Ответ 1

В Perl нет такой вещи, как статический метод. Методы, применимые ко всему классу, обычно называются методами класса. Они отличаются только от методов экземпляров по типу их первого аргумента (который является именем пакета, а не объектом). Методы конструктора, такие как new() в большинстве классов Perl, являются распространенным примером методов класса.

Если вы хотите, чтобы конкретный метод вызывался как метод класса только, выполните следующее:

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