String#dump

String#dumpメソッドは文字をエスケープしてくれます。irbを使ってdumpとevalに戯れてみました。

irb(main):001:0> s = "print \"Ruby!\"\n"
=> "print \"Ruby!\"\n"
irb(main):002:0> eval s
Ruby!=> nil
irb(main):003:0> p s
"print \"Ruby!\"\n"
=> nil
irb(main):004:0> print s
print "Ruby!"
=> nil
irb(main):005:0> s.dump
=> "\"print \\\"Ruby!\\\"\\n\""
irb(main):006:0> eval(s.dump)
=> "print \"Ruby!\"\n"
irb(main):007:0> s.dump.dump
=> "\"\\\"print \\\\\\\"Ruby!\\\\\\\"\\\\n\\\"\""
irb(main):008:0> s.dump.dump.dump
=> "\"\\\"\\\\\\\"print \\\\\\\\\\\\\\\"Ruby!\\\\\\\\\\\\\\\"\\\\\\\\n\\\\\\\"\\\"\""
irb(main):009:0> eval(eval(eval(s.dump.dump.dump)))
=> "print \"Ruby!\"\n"
irb(main):010:0> eval(eval(eval(eval(s.dump.dump.dump))))
Ruby!=> nil