Hello,

I am trying to code a method that accepts a block... easy. The problem
is that this method is recursive, so I don't know how to pass the
block through the recursive calls.

The specific code is about recurising through a directory tree while
calling the provided code block once per each directory, passing the
list of files in that directory. This is the code:

class DirInfo

	# constructor, etc. removed for clarity

	def scan
		@path.each_entry do |p|
			next if p.to_s == "." || p.to_s == ".."
			p = @path + p
			if p.file?
				finf = FileInfo.new(p)
				@files << finf
			elsif p.directory?
				dinf = DirInfo.new(p)
				dinf.scan	# ==> Recursive search of subdirs
			end
		end
		yield @path, @files
	end

end


So if I do:

di = DirInfo.new("/devtools/ruby")
di.scan do |path, files|
	puts "Directory #{path} has #{files.length} files"
end

I expect to get my block called once per each subdirectory, passing
the subdir path and list of files in that subdir. The problem is that
the fisrt time the call scan is made from within scan, no block is
given, so I get a "no block given" exception and the program stops.

I know there are other ways to scan directories, but please take it
just as an example. Still the question is, how to combine
recursiveness with blocks?

Thanks in advance,

   Luis.