ROT13という簡単な換字式暗号をRubyで作ってみました。

str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
# ROT13
p str.tr("A-Za-z", "N-ZA-Mn-za-m")
p str.tr("\x41-\x5a\x61-\x7a", "\x4e-\x5a\x41-\x4d\x6e-\x7a\x61-\x6d")

実行結果
"NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm0123456789"
"NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm0123456789"

これを次のようにダブルクォートをシングルクォートにかえると、
下の方の出力が上手くいかないのはなぜでしょうか?
また修正可能であるなら、どのように修正すればよろしいでしょうか?

str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
# ROT13
p str.tr('A-Za-z', 'N-ZA-Mn-za-m')
p str.tr('\x41-\x5a\x61-\x7a', '\x4e-\x5a\x41-\x4d\x6e-\x7a\x61-\x6d')