diff --git a/Library/Homebrew/brew.h.rb b/Library/Homebrew/brew.h.rb
index d02d44dc1ed0fea97b4e5c63724a32070acdf645..edfb15bed3a2653f356b069548f987f061d50933 100644
--- a/Library/Homebrew/brew.h.rb
+++ b/Library/Homebrew/brew.h.rb
@@ -139,8 +139,29 @@ end
 
 def clean f
   Cleaner.new f
-  # remove empty directories TODO Rubyize!
-  `perl -MFile::Find -e"finddepth(sub{rmdir},'#{f.prefix}')"`
+ 
+  # Hunt for empty folders and nuke them unless they are
+  # protected in Formula.skip_clean?
+ 
+  # We want post-order traversal, so put the dirs in a stack
+  # and then pop them off later.
+  paths = Array.new
+  Find.find(f.prefix) do |path|
+    if FileTest.directory? path
+      paths.push path
+    end
+    next
+  end
+  
+  until paths.empty? do
+    path = paths.pop
+    next if f.skip_clean? Pathname.new(path)
+    entries = Dir.entries(path) - [".", ".."]
+    if entries.empty?
+      puts "Removing empty #{path}"
+      Dir.rmdir path
+    end
+  end
 end