Пара экспериментов показывает, что это:
{ stuff }
Превращается (фактически) во что-то вроде этого псевдоперла:
my $x = eval(stuff);
$template =~ s/{ stuff }/$x/;
Таким образом, "материал" должен быть выражением, чтобы он возвращал что-то для добавления в шаблон. Ваш "материал" - это цикл foreach
, который не имеет значения, поэтому ваш шаблон не делает ничего интересного.
Если вы посмотрите на тесты для Text::Template
(всегда идите в набор тестов для примеров, наборы тестов для пакетов CPAN неоценимы для изучения того, как все работает), вы увидите такие вещи:
{ $t = ''; foreach $n (1 .. 20) { $t .= $n . ' ' } $t }
Обратите внимание, как используется $t
. Это означает, что вы хотите что-то похожее на этот шаблон:
array[0]: { $array[0] }
{ $t = ''; foreach my $i (@array) { $t .= "\t$i\n" } }
Также есть специальная переменная $OUT
, которая может занять место $t
выше. Документация для пакетов CPAN, как правило, довольно хорошая, и ее стоит прочитать, вы пропустите ее, когда будете работать на других языках.