[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

value of $1is retained

Anders Vesterberg

8/8/2006 8:31:00 AM

Hi
I am using regexp in a loop to extract a value from a
string. I have noticed that when string is nil $1 keeps its
old value, which means that the expression after regexp
does not get the correct value (which should be nil). The
code looks like this

(0..key_colnames.length-1).each do |i|
person_data[key_colnames[i]] =~ /\"?([\w\-: ]*)\"?/
# assigning $1 to something
end

Shouldn't the $-variables be reset after each regexp? Or is
it a better way to do this?

/Anders Vesterberg
http://www.ves...

2 Answers

Karl von Laudermann

8/8/2006 1:27:00 PM

0

Anders Vesterberg wrote:
> Hi
> I am using regexp in a loop to extract a value from a
> string. I have noticed that when string is nil $1 keeps its
> old value, which means that the expression after regexp
> does not get the correct value (which should be nil). The
> code looks like this
>
> (0..key_colnames.length-1).each do |i|
> person_data[key_colnames[i]] =~ /\"?([\w\-: ]*)\"?/
> # assigning $1 to something
> end
>
> Shouldn't the $-variables be reset after each regexp? Or is
> it a better way to do this?

I know this doesn't answer your question as to why it works that way,
but you could instead write:

(0..key_colnames.length-1).each do |i|
if person_data[key_colnames[i]] =~ /\"?([\w\-: ]*)\"?/
# assigning $1 to something
end
end

or even:

(0..key_colnames.length-1).each do |i|
myvar = (person_data[key_colnames[i]] =~ /\"?([\w\-: ]*)\"?/) ?
$1 :
nil
end

Incidentally, what version of Ruby are you using? I was unable to
reproduce this behavior on Ruby 1.8.4 on Windows. This sample program:

"boom" =~ /(o)/
puts "$1 = #{$1.inspect}"

"boom" =~ /(a)/
puts "$1 = #{$1.inspect}"

"boom" =~ /(o)/
puts "$1 = #{$1.inspect}"

yields this output:

$1 = "o"
$1 = nil
$1 = "o"

dblack

8/8/2006 1:37:00 PM

0