Bug 24733 - perl 5.12.2 utf8 regexp regression
Summary: perl 5.12.2 utf8 regexp regression
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: perl-base (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: at@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-12-10 03:29 MSK by Dmitry V. Levin
Modified: 2011-01-24 04:52 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dmitry V. Levin 2010-12-10 03:29:45 MSK
$ cat test.pl
use strict;
use warnings;
my $s = "\xc3\x84";
utf8::valid($s) || die;
utf8::decode($s) || die;
$s =~ s/[[:cntrl:]]//g;

$ env -i perl ./test.pl 
Use of uninitialized value $s in substitution (s///) at ./test.pl line 6.
Use of uninitialized value $s in substitution (s///) at ./test.pl line 6.

$ rpmquery perl-base
perl-base-5.12.2-alt02

This regression was found by git test suite, and it blocks git update again. :(
Comment 1 Vladimir Lettiev 2010-12-10 08:13:42 MSK
База символов Unicode (и в частности поддержка в регулярных выражениях \p{Cntrl}) вынесена в perl-unicore
Comment 2 Dmitry V. Levin 2010-12-10 17:19:01 MSK
(In reply to comment #1)
> База символов Unicode (и в частности поддержка в регулярных выражениях
> \p{Cntrl}) вынесена в perl-unicore

А зачем?  Я теперь, конечно, добавлю perl-unicore в зависимости пакета gitweb вручную, а кто-то другой даже не догадается.
Comment 3 Vladimir Lettiev 2010-12-11 10:16:15 MSK
(В ответ на комментарий №2)
> (In reply to comment #1)
> > База символов Unicode (и в частности поддержка в регулярных выражениях
> > \p{Cntrl}) вынесена в perl-unicore
> 
> А зачем?  Я теперь, конечно, добавлю perl-unicore в зависимости пакета gitweb
> вручную, а кто-то другой даже не догадается.

Причина скорее всего в том, что размер установленных данных perl-unicore 8.2Mb, что в два раза больше чем perl-base, при этом используется он весьма редко

LANG=C apt-cache whatdepends perl-unicore | awk "/^  \w/" | wc -l
11

LANG=C apt-cache whatdepends perl-base | awk "/^  \w/" | wc -l
1939

С другой стороны действительно perl-base лишён части функционала, который ожидается от perl'а по-умолчанию. Думаю, что было бы правильно обеспечить полную поддержку unicode в базовом пакете, но сделать это надо продуманно. Например, я не совсем понимаю назначение файла /usr/share/perl5/unicore/TestProp.pl (3.5Мб), вероятно он используется только при сборке.
Comment 4 at@altlinux.org 2011-01-19 10:24:42 MSK
Решение может быть в том, чтобы "наиболее часто" используемые файлы из unicore (например, в двух и более пакетах, исключая unicore/Name.pl) положить в perl-base.  В perl-5.8 был неплохой набор, но в perl-5.12 перешли на новый unicode database, там изменилось название файлов и расклад по каталогам в unicore/, так что я не успел на скорую руку подобрать удачный комплект файлов.  Сейчас этим занялся.
Comment 5 at@altlinux.org 2011-01-24 02:42:34 MSK
Короче у меня созрело такое мнение.  Если можно придумать регулярное выражение, которое при сопоставлении с utf8-строкой вытягивает файлы из perl-unicore, то это баг, при условии, что регулярное выражение не содержит unicode properties, или уж совсем какой-нибудь фигни (типа иероглифов).

Если же в регулярных выражениях используются unicode properties, то требуется установить пакет perl-unicore.

Пример регулярного выражения с unicode properties, Biber/BibTeX/PRD.pm:
my $NAME_SEQ_RE = qr/ (?:(?:\p{Lu}\S*|{\p{Lu}\S*})[\s~]*)+ /x ;

Здесь \p{Lu} означает \p{General_Category=Uppercase_Letter}.

Вот как тестировать какие файлы нужны.

$ perl -le 'print shift=~/[[:alnum:]]/' мошонка

$ perl -CA -le 'print shift=~/[[:alnum:]]/' мошонка
1
$ filereq /dev/stdout perl -CA -le 'print shift=~/[[:alnum:]]/' мошонка |fgrep /unicore/
/usr/share/perl5/unicore/Heavy.pl
/usr/share/perl5/unicore/lib/Perl/Alnum.pl
$
Comment 6 Repository Robot 2011-01-24 04:52:13 MSK
perl-1:5.12.3-alt1 -> sisyphus:

* Mon Jan 24 2011 Alexey Tourbin <at@altlinux> 1:5.12.3-alt1
- 5.12.2 -> 5.12.3
- merged perl-PerlIO and perl-Storable into perl-base
- moved some files from unicore library to perl-base (closes: #24733)
- moved Config.pod and POSIX.pod from perl-devel to perl-pod