taint checking. using -T would inform you that you are doing some very dangerous things using code like open(MARGE,">$pageroot.marge") where $pageroot just comes straight in from a parameter without any kind of scrubbing.
the code would be much more readable if the HTML were seperated out via some kind of templating system like HTML::Template.
code like if("$link" eq "some string") is bad. perl will treat $link as a string automatically; quoting it serves no purpose.
Snippets of code should be wrapped in
<code> tags not<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).