|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Ilgiz Kalmetev 2:5011/36.6 07 Sep 2000 16:56:34 To : All Subject : Re: eval "tr..." не работает -------------------------------------------------------------------------------- Wed, 06 Sep 00 21:56:26 +0600, Serge Matveev ==>: > IK> #!/usr/bin/perl -w > IK> # Хочется перевести заглавные буквы в строчный регистр (для koi8-r) > Я несколько не по вопросу, но почему бы не сделать use locale и не > пользовать обычный lc()? Потому что вообще-то это критический кусок из основной программы. Я написал (для себя) перекодировщик кириллических текстов (cp1251, koi8-r, cp866, iso-8859-5, mac) с автоопределением кодировок. Т.о. для всех кодировок локаль не припасешь. Перекодировщик в целом нормально работает. Кроме вот этого самого места - upper case -> lower case. Причем, если в tr подставлять константы, вот так: if ($charset eq "koi") { $text =~ tr/\xB3\xE0-\xFF/\xA3\xC0-\xDF/; } elsif ($charset eq "win") { $text =~ tr/\xA8\xC0-\xDF/\xB8\xE0-\xFF/; } elsif ($charset eq "alt") { $text =~ tr/\xF0\x80-\x9F/\xF1\xA0-\xAF\xE0-\xEF/; } elsif ($charset eq "mac") { $text =~ tr/\335\200-\237/\336\340-\377/; } elsif ($charset eq "iso") { $text =~ tr/\241\260-\317/\361\320-\357/; } else { die "getCharsetScore: dont know charset $charset\n" } то все работает, а вот с переменными почему-то затык. Хочется с этим разобраться, потому что вышеприведенный кусок некрасив, и, что более существенно, если от него избавиться, то для добавления- удаления кодировки в тексте программы надо будет править только одно место. -- Ilgiz Kalmetev --- slrn/0.9.5.3 (UNIX) * Origin: GoodPlace (2:5011/36.6@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/14697eb8d9b91.html, оценка из 5, голосов 10
|