Gavin Kistner wrote:
> From: Nate Murray [mailto:jashmenn / gmail.com]
> > $str = "foo123";
> >
> > my ($foo,$bar) = $str =~ /(\w+)(\d+)/;
>
> irb(main):001:0> str = "foo123"
> => "foo123"
> irb(main):004:0> _,foo,bar = /(\w+)(\d+)/.match( str ).to_a
> => ["foo123", "foo12", "3"]

And if you use this a lot, and can include your own mini-library stuff,
make it simpler:

  class Regexp
    def %( str )
      matches = match(str).to_a
      matches.shift
      matches
    end
  end

  foo, bar = /(\D+)(\d+)/ % "foo123"
  p foo, bar
  #=> "foo"
  #=> "123"


Or if you like it the other way around:
  class String
    def &( regexp )
      matches = regexp.match( self ).to_a
      matches.shift
      matches
    end
  end

  foo, bar = "foo123" & /(\D+)(\d+)/

I'm not sure if I like '%' better (ala modulo, as in "pare down my
string and give me whatever the regexp leaves"), or '&' better (ala set
intersection, as in "find whatever is common between this string and
regexp"). Up to you to pick from those, or choose another. Non-unary
operator methods left undefined in core Ruby for String and Regexp:

irb(main):002:0> NON_UNARY_OPERATOR_METHODS
=> ["[]", "[]=", "**", "~", "*", "/", "%", "+", "-", ">>", "<<", "&",
"^", "|", "<=", "<", ">", ">=", "<=>", "==", "===", "=~"]

irb(main):003:0> NON_UNARY_OPERATOR_METHODS - "".methods
=> ["**", "~", "/", "-", ">>", "&", "^", "|"]

irb(main):004:0> NON_UNARY_OPERATOR_METHODS - //.methods
=> ["[]", "[]=", "**", "*", "/", "%", "+", "-", ">>", "<<", "&", "^",
"|", "<=", "<", ">", ">=", "<=>"]