Transliteration, Not Substitution

 <  Day Day Up  >  

For this next operator, the transliteration operator (sometimes called the translation operator), think back to how regular expression substitutions work: The substitution operator, which looks like s/ pattern / replacement / and was discussed in Hour 6, works against the $_ variable unless another scalar is specified with a binding operator =~ . The transliteration operator works something like that, except that it doesn't use regular expressions and works completely differently. Still follow? The syntax for the transliteration operator is as follows :

 tr/  searchlist  /  replacementlist  / 

The transliteration operator ” TR/// ”searches a string for the elements in searchlist and replaces them with the corresponding elements in replacementlist . By default, the transliteration operator searches and modifies the variable $_ . To search and modify other variables , you use a binding operator as you would for regular expression matches, as shown here:

 tr/ABC/XYZ/;         # In $_, replaces all A's with X's, B's with Y's, etc.. $r=~tr/ABC/XYZ/;      # Does the same, but with $r 

Logical groups of characters are accepted with dashes between them. For example, A-Z represents the capital letters A tHRough Z , so that you don't have to write them all out, as in this example:

 tr/A-Z/a-z/;              # Change all uppercase to lowercase tr/A-Za-z/a-zA-Z/;        # Invert upper and lowercase 

If replacementlist is empty or identical to searchlist , the characters matched are counted by tr/// and returned. The target string is not modified, as in the following example:

 $eyes=$potato=~tr/i//;      # Count the i's in $potato, return to $eyes $nums=tr/0-9//;             # Count digits in $_, return to $nums 

Finally, for historical reasons, TR/// can also be written as y/// with the same results, because y is a synonym for tr . The TR/// operator (and hence, y/// ) also allows you to specify an alternate set of delimiters for searchlist and replacementlist . They can be any naturally paired set such as parentheses or any other character, as you can see here:

 tr(a-z)(n-za-m);         # Rotate all characters 13 to the left in $_ y[,._-][;:=];           # Switch around some punctuation 

By the Way

The TR/// operator actually has additional functionality, but it isn't used often. To read about all the other tasks TR/// can perform, look at the online documentation in the perlop section.


 <  Day Day Up  >  


SAMS Teach Yourself Perl in 24 Hours
Sams Teach Yourself Perl in 24 Hours (3rd Edition)
ISBN: 0672327937
EAN: 2147483647
Year: 2005
Pages: 241

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net