You're not printing the HTMLSTUFF. You're doing a heredoc in void context, which takes the string and does nothing with it. Try print <<HTMLSTUFF. There are a couple of other ways this could be improved, too -- use CGI methods for generating the HTMLSTUFF, for instance.