В вашей конфигурации TT вы можете использовать опцию VARIABLES для передачи списка значений, которые будут переданы каждому шаблону при его обработке. Используя некоторую хитрость таблицы символов, вы можете высосать все свои константы в конфигурацию:
use MyApp::Constants;
use Template;
my $tt; # template object
{
no strict 'refs';
$tt = Template->new( {
VARIABLES => { map { $_ => &{ 'MyApp::Constants::' . $_ } }
grep { defined &{ 'MyApp::Constants::' . $_ } }
keys %MyApp::Constants::
}
}
)
}
Он просматривает все символы в пакете MyApp::Constants
, проверяет, определены ли они как подпрограммы (это то, что constant.pm
делает под капотом), а затем использует map
для предоставления их хэш-функции для TT.