Thank you for your explanations, I can see now that :each is an 
inherited method and it had to be ferreted out of the MatchData set of 
methods.

So in order to use an enumerator, an object itself has to define an 
(:each) method and then an enumerator just augments that. I agree that 
enum_for(:some_method) is better syntax. This is what I've done just to 
experiment:

def x
  File.open('screen.css') do |f|
    while line = f.gets
      file = line.match(/" (\w* [.] css) "/xms)
      puts file.class
      puts file.respond_to?(:each) #false
      file = line.match(/" (\w* [.] css) "/xms).captures
      puts file.class #Array
      puts file.class.instance_methods(false).sort #each is defined

      e = file.enum_for(:each) #just the default
      e.each do |entry|  #now the enumerator works
        puts entry
      end

    end
  end
end

Regarding the regexp: yeah - I was using the universal matcher instead 
of the dot character by mistake. It worked to fetch the filenames but it 
was a false positive of course.

"It would be nice if the docs specified any parent class to make the 
hierarchy easy to follow."

That would be helpful, definitely.

Cheers, Vahagn

-- 
Posted via http://www.ruby-forum.com/.