From: dblack@... Date: 2006-11-01T07:49:39+09:00 Subject: Re: regex capture and assign... in one line? Hi -- On Wed, 1 Nov 2006, Luiz Eduardo Roncato Cordeiro wrote: > On Tuesday October 31 2006 18:56, Patrick Hurley <"Patrick Hurley" > wrote: >> On 10/31/06, Nate Murray wrote: >>> Question, I've been using Ruby for a while now and I have a perlism I >>> kind of miss. >>> >>> Given >>> >>> $str = "foo123"; >>> >>> my ($foo,$bar) = $str =~ /(\w+)(\d+)/; >>> >>> # now we have >>> $foo; #=> "foo" >>> $bar; #=> "123" >>> >>> I know that I can do this in Ruby in TWO lines, but I want to do it in >>> ONE line. Anyone have any ideas? >>> >>> >>> >> >> >> Something like: >> >> foo, bar = "foo123".match(/(\w+)(\d+)/).captures > > Better: foo, bar = "foo123".match(/(\D+)(\d+)/).captures The problem with using captures in a single line like this is that if there's no match, you'll get an exception (NoMethodError for nil#captures). The to_a technique, though it involves discarding the first value, avoids this problem. David -- David A. Black | dblack@wobblini.net Author of "Ruby for Rails" [1] | Ruby/Rails training & consultancy [3] DABlog (DAB's Weblog) [2] | Co-director, Ruby Central, Inc. [4] [1] http://www.manning.com/black | [3] http://www.rubypowerandlight.com [2] http://dablog.rubypal.com | [4] http://www.rubycentral.org