Template Toolkit ожидает, что это плагины для использования OO, поэтому нет способа обеспечить этот интерфейс. Если вам также нужен функциональный интерфейс, у вас есть несколько вариантов.
Perl на самом деле не различает функцию и метод. Основное различие заключается в том, что синтаксис вызова метода неявно включает ссылку на объект (или имя класса, в зависимости от того, как он был вызван) в качестве первого аргумента. Вы можете использовать синтаксис вызова функции и предоставить референт вручную:
ClassName::function('ClassName', @args);
но это грязно. Более чистым решением было бы разбить его на два субмастера с одной оболочкой для другой. например
package ClassName;
sub function {
# do something
}
sub method {
my $class = shift;
function(@_);
}
Эта функция может быть оберткой вокруг метода. Как сказал Синан, File :: Spec делает это, создавая два модуля: один с интерфейсом OO и один с функциональным интерфейсом.
Почему вы хотите сделать что-то вроде ClassName :: function ($ args ..)? –
Это статический/вспомогательный метод, который действительно не зависит от класса? – Timmy