Nice!
I've not run the code, but I have one observation and request. You are getting the coverage data by parsing the html. The html is almost certain to change and break your code. Instead, please use the API. This will also allow you to speed things up somewhat and also save space by not generating the html. The details are in the Devel::Cover::DB module.