Шаг 105.
Операции с регулярными выражениями. Операция транслитерации

    На этом шаге мы рассмотрим операцию транслитерации.

    tr/SEARCHLIST/REPLACEMENTLIST/cds

    Преобразует каждый символ из списка поиска SEARCHLIST в соответствующий символ из списка замены REPLACEMENTLIST и возвращает число преобразованных символов. По умолчанию преобразования осуществляются в строке, задаваемой переменной $_. Как и в рассмотренных на предыдущих шагах операциях поиска и замены, при помощи операций связывания =~ и !~ можно задать для преобразования строку, отличную от принятой по умолчанию

    $str =~ tr/SEARCHLIST/REPLACEMENTLIST/cds

    Списки SEARCHLIST и REPLACEMENTLIST задаются перечислением символов, могут содержать диапазоны - два символа, соединенных знаком "-", и иметь собственные символы-ограничители, например, tr (a-j) /0-9/. Операция tr/// имеет синонимичную форму, используемую в потоковом редакторе sed: y/SEARCHLIST/REPLACEMENTLIST/cds.

    Флаги cds имеют следующий смысл.


    Примеры.
$str =~ tr/A-Z/a-z/;        # преобразование прописных букв в строчные 
$count=$str=~tr/\000//c;    # подсчет числа символов в строке $str
$str =~ tr/\200-\377/ /cs;  # любая последовательность символов с ASCII-кодами
                            # от 128 до 255 преобразуется в единственный пробел

    Следующий скрипт преобразует русский текст в DOS-кодировке 866, содержащийся в файле "866.txt", в русский текст в Windows-кодировке 1251, и записывает преобразованный текст в файл "1251.txt".

#! perl -w
open(IN866,"866.txt"); 
open(OUT1251,">1251.txt"); 
while ($line=<IN866>)    
{
  $line=~tr/\200-\257\340-\361/\300-\377\250\270/;
  print OUT1251 $line;
}
close(IN866); 
close(OUT1251);
Текст этого примера вместе с файлом можно взять здесь.

    На следующем шаге мы рассмотрим операцию заключения в кавычки.




Предыдущий шаг Содержание Следующий шаг