[Bug #1953] empty range in String#tr causes unexpected behavior

Bug #1953: empty range in String#tr causes unexpected behavior

e$B5/I<<Te(B: Yusuke E.
e$B%9%F!<%?%9e(B: Open, e$BM%@hEYe(B: Normal
Target version: 1.9.x
ruby -v: ruby 1.9.2dev (2009-08-18 trunk 24578) [i686-linux

Are these intentional?

“ABC”.tr(“ABC”, “pq-a”) #=> “pqq”
“ABC”.tr(“ABC”, “pq-ar”) #=> “prr”
“ABC”.tr(“ABC”, “pq-ars”) #=> “prs”
“ABC”.tr(“ABC”, “pq-arst”) #=> “prs”

I expect that an exception is raised or that “p-a” equals to
“ponmlk…cba” (descending order).

For reference, empty range is rejected in Perl:

$ perl -e ‘“A” =~ tr/A/q-a/;’
Invalid range “q-a” in transliteration operator at -e line 1.

Yusuke ENDOH [email protected]

e$B%A%1%C%He(B #1953 e$B$,99?7$5$l$^$7$?!#e(B (by Yukihiro M.)

e$B%9%F!<%?%9e(B Assignede$B$+$ie(BClosede$B$KJQ99e(B
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

This issue was solved with changeset r25576.
Yusuke, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.