I'm having some trouble with some CGI/Perl code on my webserver. The following function uses the Archive::zip module to zip a directory on the fly and send it to STDOUT when the client clicks on a certain link. It zips the file correctly but I think I have something wrong with the headers because when the download dialog box pops up it doesn't have a filename to save and it thinks the MIME type is "httpd/unix directory" (at least in Firefox). It then saves it as a randomly generated filename without an extension. Any ideas as to how to send the headers correctly so it knows it's a zip file and uses the filename I specify?
sub fetch_archive {
my $path = "path/to/file/";
my $filename = "data.zip";
my $zip = Archive::Zip->new();
$zip->addTree( $path, '' );
print "Content-type: text/plain\n" .
"Content-Disposition: attachment;$filename\n\n".
$zip->writeToFileHandle( 'STDOUT', 0 );
return Apache::OK;
}