I was wondering when one should use s///
over tr///
when working with regular expressions in Perl?
Best Answer
s///
is for substitution:
$string =~ s/abc/123/;
This will replace the first "abc" found in $string
with "123".
tr///
is for transliteration:
$string =~ tr/abc/123/;
This will replace all occurrences of "a" within $string
with "1", all occurrences of "b" with "2", and all occurrences of "c" with "3".
tr///
is not a regular expression operator. It is suitable (and faster than s///
) for substitutions of one single character with another single character, or (with the d
modifier) substituting a single character with zero characters.
s///
should be used for anything more complicated than the narrow use cases of tr
.
From perlop: Quote and Quote-like Operators
Note that tr does not do regularexpression character classes such as\d or [:lower:]. The tr operator isnot equivalent to the tr(1) utility.If you want to map strings betweenlower/upper cases, see lc and uc, andin general consider using the soperator if you need regularexpressions.