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