You've probably read about Class::Sniff, software I've "written in anger" to deal with some terribly class composition issues. Because I already had a graph available, I decided to use it for visualization of class hierarchies. I know some people sneer at visualization ("hey, just let me read the code!"), but really, they're wrong. Reading code gives you fine-grained knowledge that a diagram cannot. Seeing the diagram instantly gives you knowledge about the code which it could ages slogging through the code to acquire.
jplindstrom started using Class::Sniff to refactor our code base. Here's a small part of it before using Class::Sniff. Here's the same bit after using Class::Sniff. It still has issues, but it is far, far better than it was. Heck, which would you want to work on?
Our test suite reveals that this refactoring has introduced one bug -- amusingly in the code with the tiny amount of multiple inheritance left. Seems we have an exception being thrown twice, but we're having trouble tracking it down.