"Matthew Westcott" <gasman / raww.org> schrieb im Newsbeitrag
news:30jlbvF3065rdU1 / uni-berlin.de...
> Hi,
> Newbieish syntax question - I'm using the block form of 'scan' like
this:
>
> "<foo,bar> <foo,baz> <foo,blarg>".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
>
> "<bar> <baz> <blarg>".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:

"<bar> <baz> <blarg>".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