What's the difference between tr/// and s/// when using regex in Perl?

前端 未结 3 1531
旧巷少年郎
旧巷少年郎 2020-12-15 04:51

I was wondering when one should use s/// over tr/// when working with regular expressions in Perl?

相关标签:
3条回答
  • 2020-12-15 05:10

    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.

    0 讨论(0)
  • 2020-12-15 05:15

    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".

    0 讨论(0)
  • 2020-12-15 05:23

    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.

    0 讨论(0)
提交回复
热议问题