Here's the error I receive now (after Guy fixing my first issue):

c:/ruby/lib/ruby/1.8/net/ftp.rb:211:in `readline': End of file reached
(EOFError)
        from c:/ruby/lib/ruby/1.8/net/ftp.rb:211:in `getline'
        from c:/ruby/lib/ruby/1.8/net/ftp.rb:221:in `getmultiline'
        from c:/ruby/lib/ruby/1.8/net/ftp.rb:235:in `getresp'
        from c:/ruby/lib/ruby/1.8/net/ftp.rb:251:in `voidresp'
        from c:/ruby/lib/ruby/1.8/net/ftp.rb:433:in `retrlines'
        from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `synchronize'
        from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `retrlines'
        from c:/ruby/lib/ruby/1.8/net/ftp.rb:628:in `list'
         ... 6 levels...
        from C:/src/ruby/chmod/ftp_chmod.rb:13:in `chmodFiles'
        from C:/src/ruby/chmod/ftp_chmod.rb:35
        from C:/src/ruby/chmod/ftp_chmod.rb:33:in `open'
        from C:/src/ruby/chmod/ftp_chmod.rb:33

Dunno why I'm getting the EOF.  Same basic logic works great in PHP and
Python.  Any help would be greatly appreciated.

Here's the code:

require 'net/ftp'

def printInfo(msg)
    puts Time.now.to_s + " :: #{msg}"
end

def chmodFiles(conn, dir)
    conn.chdir(dir)
    pwd = conn.pwd()
    dirList = conn.list()
    printInfo("file count = #{dirList.length}")
    dirList.each() { |entry|
        fileName = entry.split()[8]
        if entry =~ /^d/ # It's a directory
            printInfo(pwd)
            chmodFiles(conn, fileName)
            conn.chdir("..")
        end
    }
end

## Main
HOST        = ARGV[0] || "localhost"
PERMISSIONS = ARGV[1] || "0775"
STARTDIR    = ARGV[2] || "."

printInfo("Permissions = #{PERMISSIONS}")
printInfo("Start Dir   = #{STARTDIR}")

Net::FTP.open(HOST) { |conn|
    conn.login("blahuser", "blahpass")
    chmodFiles(conn, STARTDIR)
}