x17y19 <amberarrow / gmail.com> wrote: > On Apr 11, 9:15 am, m... / tidbits.com (matt neuburg) wrote: > > irb(main):001:0> s = "\\\\" > > => "\\\\" > > irb(main):002:0> s.length > > => 2 > > irb(main):003:0> s = "howdy".sub("howdy", s) > > => "\\" > > irb(main):004:0> s.length > > => 1 > > > > So merely using a string as the second param of sub (the replacement > > value) can cause that string to be altered. > > > > Now, the documentation does "warn" that sequences \1, \2 etc. are valid > > in the replacement string. This suggests that the replacement string is > > processed before use; to be sure, it says nothing about "\\" explicitly, > > but I do see of course that one must deal with "\\" in order to escape > > the escaping. Furthermore, there's a "workaround", namely to write the > > third line as follows: > > > > s = "howdy".sub("howdy") {|x| s} > > > > Still, I got seriously caught by this behavior and it was tricky to > > track down. m. > > > > -- > > matt neuburg, phd = m... / tidbits.com,http://www.tidbits.com/matt/ > > Leopard -http://www.takecontrolbooks.com/leopard-customizing.html > > AppleScript -http://www.amazon.com/gp/product/0596102119 > > Read TidBITS! It's free and smart.http://www.tidbits.com > > s is changing because you assigned to it, not because of using it > as the second parameter of sub(). Try assigning the result to a > different variable like so: > > ss = "howdy".sub("howdy", s) You're missing the point... m. -- matt neuburg, phd = matt / tidbits.com, http://www.tidbits.com/matt/ Leopard - http://www.takecontrolbooks.com/leopard-customizing.html AppleScript - http://www.amazon.com/gp/product/0596102119 Read TidBITS! It's free and smart. http://www.tidbits.com