LINUX.ORG.RU

perl регулярное выражение utf8

 


0

2

Здравствуйте!

use strict;
use warnings;
use Encode qw|decode_utf8 encode_utf8|;

my $text = decode_utf8('привет');
print encode_utf8($text =~ s/(\X)/\U$1/gr); # 1РИВЕТ

Почему первый символ заменяется числом? Пример искусственный, нужно с помощью регулярки менять регистр некоторых символов. Но первый превращается в цифру.

Какой перл? На Debian Stable всё норм.

perl test.pl
ПРИВЕТ

perl -v
This is perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux-gnu-thread-multi

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin
perl -v
This is perl 5, version 20, subversion 2 (v5.20.2) built for x86_64-linux-gnu-thread-multi

OS Debian Testing, спасибо за наводку протестирую на стабильной Debian.

teraman
() автор топика

всё ок

perl -v

This is perl 5, version 18, subversion 1 (v5.18.1) built for i486-linux-thread-multi
perl -v

This is perl 5, version 14, subversion 2 (v5.14.2) built for i686-linux-gnu-thread-multi-64int
(with 56 registered patches, see perl -V for more details

последний из убунты 12.04.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от teraman

Посмотри ченджлоги перла 20 ветки, может где поведение в s/// в некоторых случаях поменялось.

redgremlin ★★★★★
()

Спасибо всем откликнувшимся. Ответа почему так происходит я не нашёл. Однако происходит это только в perl старше 5.20. читал чейнджлоги там много изменений и исправлений затрагивающих регулярки. Там же нашёл решение: использование не $1 а $& например:

s/\X/\U$&/gr
в таком варианте ошибок вроде нет.

teraman
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.