|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : yurik shestakov 2:5020/400 06 Jun 2004 19:50:19 To : Serg Ivanov Subject : Re: RE -------------------------------------------------------------------------------- On Fri, Jun 04, 2004 at 06:23:17PM +0000, Serg Ivanov wrote: SI>>> Перл не сообщает об ошибке как в случаях /[]/, /[\Q\E]/ или $a=''; SI>>> /[$a]/; Hеужели существует еще какой-то символ, отличный от пустого и SI>>> не имеющий кода? AA>> Hаоборот, есть коды не имеющие символов. %) perldoc perlunicode SI> Hу так ты смысл прошлого письма понял? SI> Судя по тому, что разработчики не допускают классов вида SI> [], [\Q\E] и [$a], где $a не содержит символов, то они боятся пустоты SI> внутри класса. Ага, пойдем другим путем и сконструируем такой класс: SI> [^\000-\0377]. Какому символу этот класс соответствует? Вроде бы по виду SI> он должен соответствовать пустому символу, однако это не так, оператор SI> ''=~/[^\000-\0377]/ не находит совпадения, тогда как оператор SI> ''=~/a|/ находит (и даже ''=~/\z(a|)/ находит). SI> Hе пора ли сообщить перловым начальникам, чтоб они подправили это дело? Предлагаю следующий пример на ``попробовать'' самостоятельно: ======================================================================== use Devel::Peek; use Encode; use locale; my $str = "Слово"; my $ustr = decode("koi8-r", $str); print "str=$str\n"; my $re = qr'[^\0-\377]'; Dump($str); print "\$str matches $re\n" if $str =~ /$re/; binmode(STDOUT,':encoding(koi8-r)'); print "ustr=$ustr\n"; Dump($ustr); print "\$ustr matches $re\n" if $ustr =~ /$re/; ======================================================================== P.S. Обратить внимание на вывод Devel::Peek::Dump, осознать, что \377 -- это байт, но не всегда символ записывается одним байтом. -- // yurik shestakov --- ifmail v.2.15dev5.3 * Origin: Unknown (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1006952b9c52b.html, оценка из 5, голосов 10
|