Right ... and a third one. There is a bit of debate whether
heredocs (see quotelike operators: <<EOF)] are evil
for this purpose, but it might be an option here for short scripts.
However, if the project grows bigger, separation of content and format
will become necessary ... (e.g. by using templates).
open(OUT, ">",$outputFile) or die "couldn't open outputfile: $!";
print OUT <<'END_HEADER'; # '...' no interpolation
<HTML>
<HEAD>
<TITLE>Detailed Table of Contents</TITLE>
</HEAD>
END_HEADER
print OUT <<"END_BODY"; # "..." with interpolation
<BODY>
<H1>File: $outputFile</H1>
</BODY>
</HTML>
END_BODY