All in all, it looks fine. And the fact that it works is a big point in its favor. :-) The one thing that immediately stood out to me was your backwhack happiness in the character class in this line:
$element =~ s/[\s\,\!\?\.\-\_\;\)\(\"\']//g;
There is nothing wrong with writing that as
[\s,!?._;("'-]
instead. (Note that the dash ('-') should be last.) Many regex metachars are just fine inside a character class. You really only need to be careful with '\', ']', '-', and '^'. (I.e. the character class:
[]^\\-])
Also, on a different line you used a literal space inside the character class. That's fine but sometimes it is easier to read if you use \x20 instead.
-sauoq
"My two cents aren't worth a dime.";