Also consider XML::LibXML, which despite its name, can be coaxed into reading HTML, and then provides DOM and XPath interfaces into your HTML tree. It's also far faster than HTML::Tree, keeping the tree in C space, only converting to Perl scalars when necessary.

XML::LibXML is very fast, but it can barely parse 1% of the web pages one can find on the Internet because it expects too strict HTML. That's why your 8-lines Perl program at the end of your column doesn't work.
Tree::Builder is very slow and does not provide DOM nor XPath. I think that there is nothing in Perl that can parse real web pages while beeing fast and giving access to DOM or XPath.
fred