From: Lyndon Samson Date: 2005-04-18T18:25:31+09:00 Subject: Re: [SOLUTION] Madlibs (#28) Here's mine, its probably a bit javaish compared to most, but I'm getting there :-) template="Our ((var1:a)) favorite ((var2:bb)) language ((var1)) is ((a gemstone))." vars={} rep = template.gsub(/\(\((.*?)\)\)/) { |match| toks = match.split(":") if toks.length == 1 varName = nil varPrompt=toks[0][2..(toks[0].length-3)] else varName=toks[0][2..(toks[0].length-1)] varPrompt=toks[1][0..(toks[1].length-3)] end # Alternative but just a many lines # ndx = match.index(":") # if ndx == nil # varName = nil # varPrompt = match[2..(match.length-3)] # else # varName = match[2..(ndx-1)] # varPrompt = match[(ndx+1)..(match.length-3)] # end if varName == nil && vars[varPrompt] != nil userInp=vars[varPrompt] else print "#{varPrompt} " userInp=gets.chomp vars[varName]=userInp end userInp } puts rep