如何在Perl中提取压缩存档?

cow*_*god 7 perl unzip archive

我需要允许用户通过网络表单上传zip文件.服务器正在运行带有Apache Web服务器的Linux.有没有使用像模块的优势档案::邮编提取该档案,或者我应该只执行一个系统调用unzip与反引号?

Dav*_*ebb 14

根据Archive :: Zip文档,您最好使用Archive :: Extract:

如果您只是要提取拉链(和/或其他存档),建议您使用Archive :: Extract来查看,因为它更容易使用并且会导致特定于存档的功能.

这很有趣,因为Archive :: Extract将首先尝试Archive :: Zip,然后unzip如果失败则回退到二进制文件. 所以看起来Archive :: Zip似乎是首选.

Archive :: Zip使用Compress :: Raw :: Zlib,它是zlib系统库的低级接口; 所以它不是一个纯粹的Perl实现,这意味着它的性能会相似unzip.换句话说,从性能角度来看,没有理由选择unzipArchive :: Zip.

  • 如果你使用`Archive :: Extract`,那么它也适用于其他压缩格式. (3认同)

Bri*_*new 5

如果你执行二进制文件unzip,你的进程将fork/exec和

  1. 实例化一个新进程
  2. 消耗更多内存(在生成进程的持续时间内)

您还必须配置正确的路径unzip.鉴于这一切,我非常喜欢图书馆方法.

  • 我从不理解这种想法.fork/exec是一个非常快速的过程,任何在任何时候阅读或编写shell脚本的人都会意识到这一点.与算法的成本和(特别是)其中的数据相比,解压缩二进制本身所消耗的内存是微不足道的.并且/ usr/bin/unzip默认出现在每个Linux发行版上,我相信BSD和Cygwin也是如此.除非你有一些简单的示例代码:`打开我的$ input,"unzip -cp $ ARCHIVE $ FILE |"`,我非常喜欢这个简单的选项. (3认同)