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.