I was wondering when one should use s///
over tr///
when working with regular expressions in Perl?
The Substitution Operator The substitution operator, s///, is really just an extension of the match operator that allows you to replace the text matched with some new text. The basic form of the operator is − s/PATTERN/REPLACEMENT/;
The tr operator in Perl translates all characters of SearchList into the corresponding characters of ReplacementList. Here the SearchList is the given input characters which are to be converted into the corresponding characters given in the ReplacementList.
$1 equals the text " brown ".
m operator in Perl is used to match a pattern within the given text. The string passed to m operator can be enclosed within any character which will be used as a delimiter to regular expressions.
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 regular expression character classes such as \d or [:lower:]. The tr operator is not equivalent to the tr(1) utility. If you want to map strings between lower/upper cases, see lc and uc, and in general consider using the s operator if you need regular expressions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With