我的目标实际上就是它在标题中所说的内容。
我有以下代码行,只打印出[view archive]
,当我点击它时,浏览器只需下载zip文件。
print "\<a href=\"http:\/\/intranet.picsel.com\/~devcvs\/view-file.cgi?file=$reviewdata{'document'}&review_id=$reviewdata{'id'}\"\>[view archive]\<\/a\>\n";
我希望做的是在页面的任何位置列出此zip文件中包含的文件,例如就在这个链接链接到的新页面下面,并将文件名作为参数。
我相信一旦完成,浏览器应该只关注这些文件并在浏览器中查看它们,因为它们将是pdfs和html文件,我不会预见到任何问题。
我确信有一个模块可以做到这一点,但我不确定如何使用它来实现我的目标。
非常感谢任何帮助。
答案 0 :(得分:7)
查看Archive::Zip
:
use strict;
use warnings;
use Archive::Zip qw/ :ERROR_CODES :CONSTANTS /;
my $zipFile = 'someZip.zip';
my $zip = Archive::Zip->new();
unless ( $zip->read( $zipFile ) == AZ_OK ) { # Make sure archive got read
die 'read error';
}
my @files = $zip->memberNames(); # Lists all members in archive
print $_, "\n" for @files;
答案 1 :(得分:1)
使用Archive::Zip
无疑会使代码更容易,如果要在zip文件上进行大量工作,则应该安装该模块。
但是,对于那些不愿安装任何东西的人来说,有一种方法可以仅使用核心模块IO::Uncompress::Unzip
(已经是任何标准Perl发行版的一部分)列出zip文件的内容。
use strict;
use warnings;
use IO::Uncompress::Unzip qw($UnzipError);
my $zipFile = '/path/to/zipfile.zip';
my $u = IO::Uncompress::Unzip->new($zipFile)
or die "Error: $UnzipError\n";
my $status;
for ($status = 1; $status > 0; $status = $u->nextStream()) {
my $header = $u->getHeaderInfo();
my $zippedFile = $header->{Name};
if ($zippedFile =~ /\/$/) {
last if $status < 0;
next;
}
print "$zippedFile\n";
}