in reply to Mixed-up output

The problem is that you never reset the read position on the file before you do my @index=<TEMPLATE>. That line reads from TEMPLATE everything after the last read. Try using seek.
seek (TEMPLATE, 0, 0); # reposition to start of file my @index=<TEMPLATE>;
As a side note (and possibly to start some interesting discussion), this is one instance where I don't necessarily think using CGI.pm is appropriate. Since you are not using any of the CGI functions except for header(), this is a lot of overhead.

Instead of:

print header;
Perhaps this:
print "Content-Type: text/html\n\n";
Of course, if this is just a small subset of your code and you use other functions of CGI.pm, then this is a moot point. Just thought I'd toss that out there...

Cheers,
Ovid

Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.