Dave Thomas wrote:

> In the second case, the trick is the collect method:
> 
>    list.grep(/fred/).collect {|i| convert(i)} .each {|i| code... }
> 
> Collect takes an enumerable collection and returns a new array where
> each element is some mapping of the original collection. You can then
> further process that resulting array. In the example above I've used
> 'each', just as you did in your original. In reality, you can keep
> expanding this array pipeline indefinitely
> 
>    list.collect {|i| doThing1(i) } .
>         collect {|i| doThing2(i) } .
>         collect {|i| doThing3(i) } .
>         collect {|i| doThing4(i) } .
>         collect {|i| doThing5(i) } ... etc

====================================================
# cat x.rb
#!/usr/bin/env ruby

def x(list)
    p list

    p list.collect { |i| i.sub(/.*/, "1_#{$&}_1") } 

    p list.collect { |i| i.sub(/.*/, "1_#{$&}_1") } .
	   collect { |i| i.sub(/.*/, "2_#{$&}_2") } 

    print "\n"
end

x( %w(a) )
x( %w(a b c d) )
====================================================

====================================================
# ruby -w x.rb   
["a"]
["1__1"]
["2_a_2"]

["a", "b", "c", "d"]
["1__1", "1_a_1", "1_b_1", "1_c_1"]
["2_d_2", "2_1_d_1_2", "2_1_a_1_2", "2_1_b_1_2"]

====================================================

And, in the unlikely case that I'm not overlooking something that should
have be utterly obvious,

====================================================
# ruby -v
ruby 1.6.0 (2000-08-31) [rs6000-aix4.3.2.0]
====================================================

-- 
Conrad Schneiker
(This note is unofficial and subject to improvement without notice.)