<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">24.04.2015 19:54, Denis Ibaev пишет:<br>
</div>
<blockquote
cite="mid:CAG=DCOeiotBu1LA-Hw7+uoUa_4Mx3afi12mRepBWd5LBy3OBmQ@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>
<div>Привет.<br>
<br>
Не могу понять, почему в одном случае ниже приведённый
скрипт выставляет у строки флаг utf8, а в другом нет. Без
прагмы encoding такого эффекта не наблюдается. Может
кто-нибудь объяснить?<br>
<br>
Вывод скрипта:<br>
<br>
v1 is utf-8 = 0<br>
v2 is utf-8 = 0<br>
v1 is utf-8 = 1<br>
v2 is utf-8 = 0<br>
</div>
</div>
</div>
</blockquote>
<br>
1) Без прагмы "use encoding 'utf-8'" chr() никогда флаг не ставит
(точнее до 255)<br>
2) С прагмой если код cимвола < 128 chr флаг ставит, c 128 до
255 не ставит, а более 255 ставит.<br>
<br>
В принципе какая то логика в этом есть, если считать что chr до 255
должно возвращать latin-1, но кмк кривая. <br>
<br>
Может можно:<br>
1) починить c помощью use bytes<br>
2) или испытать магию GLOBAL::CORE::chr = ...<br>
3) BEGIN{ $INC{"encoding.pm"} = "Janky go home" } перед загрузкой
твоего модуля.<br>
<br>
<br>
<br>
<br>
<blockquote
cite="mid:CAG=DCOeiotBu1LA-Hw7+uoUa_4Mx3afi12mRepBWd5LBy3OBmQ@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>
<div><br>
</div>
Сам скрипт:<br>
<br>
use strict;<br>
use warnings;<br>
use v5.12;<br>
use utf8;<br>
<br>
use encoding 'utf-8';<br>
<br>
my $v1 = '';<br>
my $v2 = '';<br>
<br>
utf8::downgrade($v1);<br>
utf8::downgrade($v2);<br>
<br>
say 'v1 is utf-8 = ', utf8::is_utf8($v1) || 0;<br>
say 'v2 is utf-8 = ', utf8::is_utf8($v2) || 0;<br>
<br>
$v1 .= chr(hex($_)) for qw(22 D0);<br>
$v2 .= chr(hex($_)) for qw(D0);<br>
<br>
say 'v1 is utf-8 = ', utf8::is_utf8($v1) || 0;<br>
say 'v2 is utf-8 = ', utf8::is_utf8($v2) || 0;<br>
<br>
</div>
<div>Окружение:<br>
</div>
<div><br>
$ perl -v<br>
This is perl 5, version 14, subversion 2 (v5.14.2) built for
x86_64-linux-gnu-thread-multi<br>
(with 57 registered patches, see perl -V for more detail)<br>
<br>
$ perl -MEncode -E 'say Encode->VERSION'<br>
2.73<br>
<br>
-- <br>
</div>
Денис Ибаев<br>
<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
</blockquote>
<br>
</body>
</html>