2007/10/18, Luis <lcrespom / gmail.com>: > > The typical (and IIRC most efficient) idiom is to pass on the block > > parameter: > > > > def foo(&b) > > foo(&b) > > end > > That looks nice and simple. > Thanks! > > > > > > Another remark: it seems you are reinventing Find.find(). Why do you do > > that? > > > > > As I said, the dir scanning was just an example of recursiveness. > Still, I do need to scan a directory in a way that I get an array of > files per each block call, and not one file at a time, because I want > to compare the contents of a directory with other directory, in order > to identify changed files, new files, deleted files, etc. You can still build that with Find.find() which saves you the traversal code: #!ruby require 'find' require 'pp' ARGV.each do |dir| list = Hash.new {|h,k| h[k] = []} Find.find dir do |f| d, b = File.split f next if /^\.\.?$/ =~ b list[d] << b end pp list end Cheers robert