$ 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. :(
База символов Unicode (и в частности поддержка в регулярных выражениях \p{Cntrl}) вынесена в perl-unicore
(In reply to comment #1) > База символов Unicode (и в частности поддержка в регулярных выражениях > \p{Cntrl}) вынесена в perl-unicore А зачем? Я теперь, конечно, добавлю perl-unicore в зависимости пакета gitweb вручную, а кто-то другой даже не догадается.
(В ответ на комментарий №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Мб), вероятно он используется только при сборке.
Решение может быть в том, чтобы "наиболее часто" используемые файлы из unicore (например, в двух и более пакетах, исключая unicore/Name.pl) положить в perl-base. В perl-5.8 был неплохой набор, но в perl-5.12 перешли на новый unicode database, там изменилось название файлов и расклад по каталогам в unicore/, так что я не успел на скорую руку подобрать удачный комплект файлов. Сейчас этим занялся.
Короче у меня созрело такое мнение. Если можно придумать регулярное выражение, которое при сопоставлении с 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 $
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