このようなものが役立つはずです...
use Archive::Zip;
my $zip = Archive::Zip->new();
#create your zip here
use IO::Scalar;
my $memory_file = ''; #scalar as a file
my $memfile_fh = IO::Scalar->new(\$memory_file); #filehandle to the scalar
# write to the scalar $memory_file
my $status = $zip->writeToFileHandle($memfile_fh);
$memfile_fh->close;
#print with apache
#$r->content_type(".......");
$r->print($memory_file); #the content of a file-in-a-scalar
編集:上記は廃止されました。Archive :: Zipドキュメントから:
IO::Scalarを避けてください
Archive :: Zipを使用する最も一般的な方法の1つは、メモリ内にZipファイルを生成することです。ほとんどの人はこの目的のためにIO::Scalarを使用しています。
残念ながら、1.11以降、このモジュールはシークを誤って実装しているため、IO::Scalarでは機能しなくなりました。
IO :: Scalarを使用する人は誰でも、IO :: Stringへの移植を検討する必要があります。これは、より小さく、より軽く、通常のシーク可能なファイルハンドルと完全に互換性があるように実装されています。
IO :: Scalar自体は、下位互換性の問題のために実装方法を変更できないため、IO::Scalarのサポートは将来復元されない可能性があります。