Нормальный линуксовый терминал. Я вот думаю что какой-то из байт может оказаться кодом волшебного символа для регекспа - тогда может произойти что угодно.
22 мая 2014 г., 17:11 пользователь Victor Efimov <[email protected]> написал: > например: > > без use utf8, строка '№«».,' видится perl как отдельные байты. > никакого отношения к символам, которые ты написал, не имеющие. > какой-то символ может состоять из 2х и более байтов. > они считаются отдельными. строка получается > "\342\204\226\302\253\302\273.," (oct) > quotemeta над этой строкой просто эскейпит ascii точки. > > $str при этом "... \302\253\302\273\302\253\302\273" (в нём вместо 4х > кавычек 8 "символов") > > результирующая строка > > ". \302" > > что логично. точка 1 раз. пробел 1 раз. и символ \302 1 раз, т.к. все > не-ascii символы из исходной $str входят > в [] в регэкспе. > > далее выводим эту строку не на экран а в файл (сделав редирект ">") > > смотрим, получились байты 0x2E (точка) 0x20 (пробел) 0xC2 (это как раз > \302 oct) > > выводим на экран этот файл: cat file > если последний символ обрезался (точно так же как если изначально > запустить скрипт)- это проблемы твоего терминала. > он ждёт UTF8 , а тут какие-то левые байты, не являющиеся валидным UTF8 > если к этой строке добавить ещё пару символов, будет нормально > выводиться (вернее будет выводиться ромбик - "неизвестный символ"). > > > 22 мая 2014 г., 16:48 пользователь Victor Efimov <[email protected]> > написал: > > Я думаю смогу объяснить подробно что и почему, про все нюансы. Но я же > > говорю - не понятно что должно происходить. Выводит в обоих случаях > > что-то непонятное. > > > > 22 мая 2014 г., 16:41 пользователь Алексей Мышкин <[email protected]> > написал: > >> Это не объяснение. Символ-то почему режется? > >> Ладно бы на "широкий символ" ругнулось - это понятно. Но почему строка > >> выводится не целиком - вот вопрос. > >> > >> > >> 22 мая 2014 г., 16:26 пользователь [email protected] <[email protected]> > >> написал: > >> > >>> > >>> > http://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/6163129#6163129 > >>> > >>> > >>> On 22.05.2014 15:24, Алексей Мышкин wrote: > >>>> > >>>> А объяснить? > >>>> > >>>> > >>>> 22 мая 2014 г., 15:16 пользователь Antonio Nikishaev <[email protected] > >>>> <mailto:[email protected]>> написал: > >>>> > >>>> > >>>> > >>>> On 22 May 2014, at 14:58, Алексей Мышкин <[email protected] > >>>> <mailto:[email protected]>> wrote: > >>>> > >>>> > Всем доброго дня. > >>>> > Есть такой код: > >>>> > #!/usr/bin/env perl > >>>> > use strict; > >>>> > #use utf8; > >>>> > > >>>> > my $BadChars = quotemeta '№«».,'; > >>>> > > >>>> > my $BadCharsRX = qr/$BadChars/u; > >>>> > > >>>> > my $str = '... «»«»'; > >>>> > > >>>> > $str =~ s/([$BadCharsRX])[$BadCharsRX]+/$1/g; > >>>> > > >>>> > print "$str\n"; > >>>> > =====cut===== > >>>> > > >>>> > выдаёт ахинею > >>>> > если сделать так: > >>>> > > >>>> > my $str = '... №№№ «»«»'; > >>>> > то начинает работать. > >>>> > > >>>> > Что за чёрт? > >>>> > > >>>> > Perl v5.14.2 > >>>> > >>>> Писать надо нормально. Всё будет работать > >>>> > >>>> use utf8; > >>>> use open qw<:std :utf8>; > >>> > >>> -- > >>> Moscow.pm mailing list > >>> [email protected] | http://moscow.pm.org > >> > >> > >> > >> > >> -- > >> С уважением, > >> Мышкин Алексей. > >> > >> -- > >> Moscow.pm mailing list > >> [email protected] | http://moscow.pm.org > >> > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- С уважением, Мышкин Алексей.
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
