Мне было интересно, когда нужно использовать s/// над tr/// при работе с регулярными выражениями в Perl?
s///
tr///
s/// для замены:
$string =~ s/abc/123/;
Это заменит первый "abc", найденный в $string на "123".
$string
tr/// для транслитерации:
$string =~ tr/abc/123/;
Это заменит все вхождения «a» в $string на «1», все вхождения «b» на «2» и все вхождения «c» на «3».
tr/// не является оператором регулярного выражения.Он подходит (и быстрее, чем s///) для замены одного отдельного символа другим отдельным символом или (с модификатором d) замены одного символа нулевыми символами.
d
s/// должно бытьиспользуется для чего-то более сложного, чем узкие случаи использования tr.
tr
С perlop: операторы цитирования и подобные им
Обратите внимание, что tr не делает обычные классы символов выражения, такие как \ d или [: lower:]. Оператор tr не эквивалентен утилите tr (1). Если вы хотите отобразить строки между нижний / верхний регистры, см. lc и uc, и в общем рассмотреть возможность использования с оператор, если вам нужно регулярно выражения.