From: Robert Klemme Date: 2004-11-25T00:48:07+09:00 Subject: Re: Block form of 'scan' with one set of parens "Matthew Westcott" schrieb im Newsbeitrag news:30jlbvF3065rdU1@uni-berlin.de... > Hi, > Newbieish syntax question - I'm using the block form of 'scan' like this: > > " ".scan(/<(\w*),(\w*)>/) { |first,second| > puts "#{first.upcase} and #{second.upcase}\n" > } > > which works fine. However, if the regex only has one set of parentheses, > I can't do > > " ".scan(/<(\w*)>/) { |first| > puts "#{first.upcase}\n" > } > > because it assumes that I want 'first' to be an array of all the matched > groups, and so it dies with > "undefined method `upcase' for ["bar"]:Array (NameError)". > > Is there any way to persuade Ruby to treat |first| as a (singleton) list > of strings to be assigned? I can use |first,dummy| as a workaround, but > is there a neater way that I'm missing? Try this: " ".scan(/<(\w*)>/) { |first,| puts "#{first.upcase}" } Note: putting a "\n" at the end of a string that is printed with puts does not have any effect, you'll have to put two "\n" if you want to have an additional line. Kind regards robert