From: Stefano Crocco Date: 2007-08-14T01:56:40+09:00 Subject: Re: Returning argument as a number problem Alle luned狸 13 agosto 2007, Haze Noc ha scritto: > Hey guys, I have a method as such: > > def random(len) > if len !~ /\d+/ > pub_send "Invalid number" > elsif len > 30 > pub_send "No more then 30 chars" > else > chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a > random = "" > 1.upto(len) { |i| newpass << chars[rand(chars.length)] } > pub_send random > end > end > > and i call the method like so.. > > random($1) if $msg =~ /^rand (\d+)/ > > the value of $1 will always be a number, but it seems when i am passing > it to the function it returns an error saying it cannot compare len to > 30 because the value of len is a string... Any ideas? > > Thanks in advance No, $1 will always be a string: the $1.. variables are set to the part of string matching the corresponding group. No conversion is done on it, you have to do that yourself. So, you should replace the last line with: random($1.to_i) if $msg =~ /^rand (\d+)/ I hope this helps Stefano