Оператор трансляции TR

Оператор трансляции tr/// подставляет одни заданные символы вместо дру¬гих. Имеет следующий формат:
tr/<CMMBOJibi для замены>/<Новые символы>/ [<Модификатор> ]
В параметре <модификатор> могут быть указаны следующие флаги:
• без флага — символ из параметра <символы для замены> будет заменен на соответствующий по порядку символ из параметра <новые символы>. Если список новых символов короче, чем список символов для замены, то вме¬сто недостающих символов будет использоваться последний символ из списка новых символов;
• с — будут заменены все символы, кроме указанных в параметре <символы
для замены>;
• d— удаляются все символы, для которых нет соответствия в параметре
<Новые символы>;
• s— последовательности одинаковых символов, которые образовались в результате трансляции, будут заменены одним символом.
Для преобразования строки используется оператор связывания =~.
Преобразуем все строчные буквы в прописные:
$str = "строка";
$str =- tr/a-я/А-Я/;
print $str; # Выведет СТРОКА
Заменим все символы, не являющиеся русскими буквами, на знак вопроса:
$str = "строка string";
$str =~ tr/a-я /?/с;
print $str; # Выведет "строка ??????"
Вместо шести знаков вопроса выведем только один:
$str = "строка string";
$str =~ tr/a-я /?/cs;
print $str; # Выведет "строка ?"
А теперь выведем количество произведенных замен:
$str = "строка";
$count = $stг tr/a-я/А-Я/; print $count; # Выведет 6
Сделаем список для замены больше на один символ, чем список новых сим¬волов: $str = "строка"; >
$str =~ tr/строка/строк/; print $str; # Выведет строкк
Как видно из примера, букве "а" не нашлось соответствующего символа для замены. По этой причине этот символ был заменен последней буквой из спи¬ска новых символов ("к"). Теперь продемонстрируем результат применения модификатора "сГ:
$str = "строка";
$str =~ tr/cTpOKa/cTpOK/d; print $str; # Выведет строк
В этом случае буква "а" была просто удалена.
Если список новых символов не указан, то символы не заменяются Точнее, они заменяются сами на себя, но это не заметно при выводе. Именно благо¬даря замене можно посчитать количество вхождений символа в строку:
$str = "ссылка";
$count = $str =~ tr/c//; print $count; # Выведет 2 print $str; # Выведет ссылка



Web сайты на Perl и MySql