Reprocess Escape Sequences

I am getting a string that has escape sequences in it, and I would like
to print it to the screen after reprocessing the escape sequences. Maybe
I have missed something obvious but I haven’t seen anything in the docs
that suggest how to do this. To replicate the behaviour I create a
string in irb like so:

$ irb

str = ‘some \n\r string \t with \r escape \n sequences’
=> “some \n\r string \t with \r escape \n sequences”

eval “puts str”
some \n\r string \t with \r escape \n sequences
=> nil

puts “%s” % str
some \n\r string \t with \r escape \n sequences
=> nil

I recognize that I can simply do a gsub:

puts str.gsub(/\n/, “\n”)
some
\r string \t with \r escape
sequences
=> nil

but that would mean I would have to pattern match all sequences, and it
seems like there should be a better way

Any suggestions?

2010/4/22 Nathaniel M. [email protected]:

some \n\r string \t with \r escape \n sequences
=> nil

If you use eval you rather need to do something like this

irb(main):004:0> str = ‘some \n\r string \t with \r escape \n sequences’
=> “some \n\r string \t with \r escape \n sequences”
irb(main):005:0> puts eval(’"’+str+’"’)
some
escape with
sequences
=> nil
irb(main):006:0>

=> nil

but that would mean I would have to pattern match all sequences, and it
seems like there should be a better way

Actually doing a replacement would probably be my preferred way
because of the security implications of eval.

You can do it in one go

irb(main):008:0> PAT = {‘n’=>"\n",‘t’=>"\t",‘r’=>"\r"}
=> {“n”=>"\n", “t”=>"\t", “r”=>"\r"}
irb(main):009:0> str.gsub(/\(.)/){|m| PAT[$1]}
=> “some \n\r string \t with \r escape \n sequences”

Kind regards

robert