[Moscow.pm] utf8 и Template Toolkit

Dmitry E. Oboukhov unera на debian.org
Пт Авг 8 06:18:46 PDT 2008


спасибо!

я примерно то же написал было сперва, 
а потом переделал без хака (добрые люди посоветовали в привате)


то есть если определить наследника от Template::Provider:
package MyProvider;
use base qw(Template::Provider);
sub _decode_unicode
...

то тогда можно потом в конструкторе передавать его прямо классу
Templates:

$tmpl = new Template(
    LOAD_TEMPLATES => [ MyProvider->new(INCLUDE_PATH => $dirname) ]
);

и получается то же самое, только как мне кажется более красивее

VVP> Вот мой хак из доклада

VVP> BEGIN {
VVP> use Template::Provider;
VVP> use bytes;
VVP> no warnings 'redefine';
VVP> my $bom = "\x{feff}";
VVP> my $len = length($bom);
VVP> *Template::Provider::_decode_unicode = sub {
VVP> shift;
VVP> my $s = shift;
VVP> # if we have bom, strip it
VVP> $s = substr($s, $len) if substr($s, 0, $len) eq $bom;
VVP> # then decode the string to chars representation
VVP> utf8::decode($s);
VVP> return $s;
VVP> }
VVP> }

VVP> On Friday 08 August 2008 11:49:02 Dmitry E. Oboukhov wrote:
VVP> > то есть я написал примерно такую хрень:
VVP> >
VVP> > sub _my_decode_unicode
VVP> > {
VVP> >     my ($self, $string)=@_;
VVP> >     $string="\x{ef}\x{bb}\x{bf}$string";
VVP> >     $old_decode_unicode->($self, $string);
VVP> > }
VVP> > $old_decode_unicode=\&Template::Provider::_decode_unicode;
VVP> > *Template::Provider::_decode_unicode=\&_my_decode_unicode;
VVP> >
VVP> > но во первых не очень мне это нравится, во вторых
VVP> > как убрать вот такую ругань:
VVP> >
VVP> > [Fri Aug  8 11:39:46 2008] test_auth.cgi: Subroutine
VVP> > Template::Provider::_decode_unicode redefined at ./test_auth.cgi line
VVP> > 23.
VVP> > ?
VVP> > --
VVP> > ... mpd is off
VVP> >
VVP> > . ''`. Dmitry E. Oboukhov
VVP> >
VVP> > : :’  : unera на debian.org
VVP> >
VVP> > `. `~’ GPGKey: 1024D / F8E26537 2006-11-21
VVP> >   `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
--
... mpd playing: WASP - King Of Sodom And Gomorrah

. ''`. Dmitry E. Oboukhov
: :’  : unera на debian.org
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: отсутствует
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20080808/f4fd03bf/attachment.bin>


Подробная информация о списке рассылки Moscow-pm