On 13/11/06, gigaday / googlemail.com <gigaday / googlemail.com> wrote:
> I am doing a little script that builds an array (called darray) of all
> filenames in a directory tree.  I am doing this by recursively calling
> a method (called enter_dir) and passing the partially filled array
> (called darray) down through the recursive calls.
>
> The code works, but I am concerned about the efficiency of passing what
> is potentially quite a large array around so many times.  Should I be
> concerned about this or not?
>
> I also wrote the code using a global array ($darray) and this worked
> too and didn't need to array to be passed down through the recursions.
>
> What are the pros and cons of these two approaches?
>
>
> def enter_dir(this_dir, darray)
> farray = []
> this_dir.each {|fname|
>   farray << fname
>   }
> farray.each {|fname|
>   file_path = this_dir.path + '/' + fname
>   if File.stat(file_path).directory?
>     this_dir_sub = Dir.new(file_path)
>     if fname != '.' && fname != '..'
>       enter_dir(this_dir_sub, darray)
>     end
>   else
>     darray << file_path
>   end
> }
> end
>
> this_dir = Dir.new('/home/tony/Ruby/dot_recycle')
> darray = []
> enter_dir(this_dir, darray)
> puts darray

You're not actually passing the array around whenever you call
enter_dir, rather you're passing a reference to the object, so the
performance penalties should not be noticable at all.

Farrel