Как мне определить «статические» подпрограммы в Perl? - PullRequest
17 голосов
/ 02 октября 2010

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

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

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

ps Я думаю, что терминология Perlish, на которую я ссылаюсь, это "методы класса" .

1 Ответ

18 голосов
/ 02 октября 2010

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

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

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