in reply to CGI.pm woes with multipart attachments
Perhaps a piece of the puzzle: Your magic line Content-Disposition: attachment\; filename=$file is what suggests the filename for the browser. CGI's multipart_start() function does not print this. However, you should be able to pass it yourself:
print multipart_start( -TYPE=>'application/octet-stream', '-Content-Disposition'=>"attachment\; filename=test.tgz", # Have t +o quote the directive here );
An aside: I don't know how, offhand, to determine the current filename using merlyn's code, other than a kludge like $filename = $ARGV[$count++]; since $_ is the contents of each file, not the file's name.
Update: Sorry if this is obvious: Don't forget to try running it from a command-line to debug. That will let you see the exact headers and file contents the script is printing.