Поиск

Транслитерация, а не подстановка

Прежде чем рассмотреть оператор транслитерации (который иногда называют оператором перекодировки), давайте немного вспомним, как работает оператор, подстановки, о котором шла речь на 6-м занятии, "Поиск по шаблону". Оператор подстановки имеет вид в/шаблон/замена/ и, если не задан оператор привязки =", выполняет поиск по шаблону и замену строки, находящейся в служебной переменной $_. Оператор транслитерации чем-то напоминает оператор подстановки, однако работает он немного иначе, поскольку в нем не используются регулярные выражения. Синтаксис этого операторы выглядит так:

Оператор транслитерации tr/// выполняет поиск в строке элементов, указанных в первом списке, и заменяет их на соответствующие элементы из второго списка. По умолчанию поиск и замена выполняются в строке, находящейся в переменной $_. Чтобы изменить это правило, необходимо воспользоваться оператором привязки =", как в случае использования регулярных выражений, например:

Для логической группировки символов используется дефис. Например, конструкция A-Z представляет список прописных букв от А до Z включительно. Логическая группировка позволяет избежать перечисления символов в списке, например:

Если в операторе транслитерации второй список идентичен первому или вовсе отсутствует, то оператор tr/// выполняет только подсчет найденных символов и возвращает данное значение. При этом исходная строка не изменяется, например:

И в заключение отметим, что у оператора tr/// есть синоним — оператор у///. Исторически так сложилось, что префиксы tr и у обозначают одну и ту же операцию. В операторе tr/// (а значит, и в у///) можно заменить символ разделитель списков. Обычно программисты выбирают пару круглых или квадратных скобок или любой другой подходящий символ, например:

У оператора tr/// есть ряд дополнительных функциональных возможностей, которые используются сравнительно редко. Чтобы ознакомиться с ними, обратитесь к разделу prelop справочного руководства.