Как убрать предупреждение TT «Широкий символ в печати»? - PullRequest
11 голосов
/ 18 марта 2010

У меня появляется это предупреждение каждый раз, когда я запускаю свой CGI-скрипт (вывод обрабатывается с помощью Template :: Toolkit):

Wide character in print at /usr/local/lib/perl5/site_perl/5.8.9/mach/Template.pm line 163.

Как правильно его устранить?

Я создаю объект tt, используя эту конфигурацию:

my %config = (
       ENCODING     => 'utf8',
       INCLUDE_PATH => $ENV{TEMPLATES_DIR},
       EVAL_PERL   => 1,
}
my $tt = Template->new(\%config); 

Ответы [ 2 ]

8 голосов
/ 18 марта 2010

Поставьте это перед вызовом $tt->process(), чтобы автоматически закодировать вывод:

binmode STDOUT, ':utf8';

Редактировать : Как упоминалось daxim , можно использовать средства кодирования TT:

$tt->process($infile, $vars, '-', { binmode => ':utf8' })

Это основано на широко используемом соглашении, согласно которому имя файла '-' дает вам STDIN, когда оно открыто для чтения, и STDOUT, когда оно открыто для записи.

Редактировать 2 : Кстати, последний способ не работает для меня под mod_perl (2.0.5).

1 голос
/ 18 марта 2010
$tt->process($infile, $vars, $outfile, { binmode => ':encoding(UTF-8)' })

Это задокументировано в http://search.cpan.org/perldoc?Template#process%28%24template%2C_%5C%25vars%2C_%24output%2C_%25options%29.

...