Удалось сделать небольшой скрипт, где возникает ошибка.
файл со скриптом:
use utf8;
use strict;
use vars qw($dbh $tt);
use DBI;
use Template;
$dbh = DBI->connect(«DBI:mysql:database=mybase;host=localhost;port=3306», «login», «pass»);
$tt = Template->new({
INCLUDE_PATH => '.',
DEFAULT_ENCODING => 'utf8',
ENCODING => 'utf8',
}) || die "$tt::ERROR\n";
my $testvar = $dbh->selectrow_array(«SELECT 'Текст'»);
$tt->process('template.htm', { 'testvar' => $testvar }) || die $tt->error(), "\n";
Темплейт — в отдельном файле template.htm
Если в темплейте оставить следующее:
[% testvar %] and some ascii text.
тогда отрабатывает ок, на выходе получаем «Текст and some ascii text.»
Если в темплейт добавить русский текст, например
[% testvar %] русский and some ascii text.
то на выходе имеем кашу:
ТекÑÑ русский and some ascii text.
При этом оба файла, и скрипт и темплейт, сохранены в utf-8 с заголовком BOM.