This is not going to work the way you want it to. Your program 'metaStk.pl' will generate the file metafile.gz each time the script is called meaning you wont know which file the user is going to get...
May I suggest something like this instead:
print header("application/zip");
system("/usr/bin/perl metaStk.pl");
where your metaStk.pl now prints the metafile.gz into STDOUT.
T
I
M
T
O
W
T
D
I