From: RichardOnRails Date: 2008-08-02T14:38:57+09:00 Subject: Re: A couple of basic questions On Jul 30, 3:33 am, Robert Klemme wrote: > 2008/7/30 RichardOnRails : > > > > > Hi, > > > Q.1: I was processing file/dir names with the following snippet: > > > Find.find(wd) do |item| # Subordinate file/directory fully-qualified > > names > > if File.directory?(item) > > # Process directory name > > if item =~ /portfolio/i > > item_saved = ' ' + item > > item.gsub!(/portfolio/, 'position') > > > When I saved item in item_saved without modification, the gsub change > > both the item name as well as the saved name (because what was saved > > was a reference to item, not item's content). So my work-around was > > to save a modified name. That doesn't seem like "The Ruby Way". > > What's a better way? > > Leave item alone and store the new name in a new variable: > > if ... > new_item = item.gsub(/portfolio/, 'position') > > (notice the missing "!") > > > Q. 2: In that same snippet, I made two substitutions: > > > item.gsub!(/portfolio/, 'position') > > item.gsub!(/Portfolio/, 'Position') > > > That's also a kluge. But the following didn't compile: > > > item.gsub!(/([pP])ortfolio/, $1 + 'osition') > > This cannot work because $1 is evaluated only once, i.e. before #gsub > is invoked. You need something like Phlip suggested. > > item.gsub /([pP])ortfolio/, '\\1osition' > > > Is there a "Ruby Way" to reduce the redundancy? > > Yes. > > Cheers > > robert > > -- > use.inject do |as, often| as.you_can - without end Hi Philip & Robert, Thank you both very much for clearing the fog from my brain :-) BTW, the deity of choice for me is the null set :-) Best wishes, Richard