Прежде всего позвольте мне отметить, что настоятельно рекомендуется помещать use strict; use warnings;
в начало вашего скрипта.
Если вы сделаете это для своего фрагмента, генерирующего шаблон $, вы получите ошибку Bareword "make_formatter" not allowed while "strict subs" in use
, который должен помочь вам определить, что это бесполезная запись.
Теперь, если вы вместо этого вызовете make_formatter()
, это выдаст <h1>[] MyFormatter</h1>
.Это имеет смысл: ваша функция вернула подпрограмму, которая вызывается с помощью 'MyFormatter' в вашем шаблоне (а $ level равен undef, как вы вызывали make_formatter без ввода).
Как указал г-н Хегланд,
my $template = Template->new({
VARIABLES => {
make_formatter => \&make_formatter,
}
});
приводит к выводу, который, как я понимаю, вам нужен:
<h1>[MyFormatter] Sample message</h1>
\ & make_formatter дает вам ссылку на подпрограмму, которую в perl обычно можно вызывать с помощью: my $ref = \&make_formatter; $ref->( 'Input' );
Это можно затем вызвать в первой строке вашего шаблона, возвращая другой код ref, который затем вызывается во второй строке.
Надеюсь, это поможет!