From: Lloyd Zusman Date: 2009-03-18T03:59:24+09:00 Subject: Interpolating $1, etc., from within a gsub block I'm trying to use the block form of gsub in order to do substitution involving an interpolation stored within a variable, but I can't figure out how to get it to work. Here's a simplified case of what I'm trying to do: $fromre = Regexp.compile(ARGV[0]) $repl = ARGV[1] $replcount = 0 string = "... something arbitrary ..." string.gsub!($fromre) { |x| $replcount += 1 $repl } As you can see, the regexp comes in on the command line, as well as the replacement. I want to do this substution using the block form so I can count the number of replacements that were made. This works as long as $repl doesn't contain any references to matched patterns. However, if this program is called 'myprog' and I do the following, the replacement of $1 with the indicated subexpression doesn't occur: myprog 'abc(\S+)def' 'NEW-$1-MATCH' In other words, if the string being substituted is this, "abcFOOBARdef", the result is not "NEW-FOOBAR-MATCH" as I would like it to be, but rather, "NEW-$1-MATCH". It's clear why this doesn't work, but I can't figure out what construct to use within the gsub block or on the command line to make sure that it _does_ work. I also tried this, and not surprisingly, it didn't work, either: myprog 'abc(\S+)def' 'NEW-#{$1}-MATCH' Can anyone suggest how I can accomplish this? Thanks in advance. -- Lloyd Zusman ljz@asfast.com God bless you.