Archive :: Tar模块的内存不足问题

时间:2015-08-21 05:51:10

标签: perl perl-module mod-perl

我在Windows中使用Archive::Tar进行tar文件提取。该脚本在大多数情况下工作正常,但遇到一个大的tar文件时,它会抛出一个内存不足的错误。我听说这是这个模块的已知问题。

您知道是否有办法解决此问题?

1 个答案:

答案 0 :(得分:2)

这是因为Archive::Tar将给定的tar文件读入内存。

  

使用Archive::Tar->iter返回读取的迭代器函数   tar文件没有将其全部加载到内存中。每次都是这个功能   被调用它将返回tarball中的下一个文件。文件是   作为Archive :: Tar :: File对象返回。迭代器函数返回   一旦耗尽了所包含的文件,就会出现空列表。

同时查看

  

Archive::Tar::Streamed - 焦油档案,非记忆驻留

     

Archive::Tar::Wrapper - 围绕' tar'的API包装器命令行   效用。它永远不会在内存中存储任何东西,但它是暂时的   磁盘上的目录结构。

根据评论更新:

my $next = Archive::Tar->iter( "example.tar.gz", 1, {filter => qr/\.pm$/} ); #apply the filter here, what type of files do you want to iterate over

while( my $f = $next->() ) {
    print $f->name, "\n";

    $f->extract or warn "Extraction failed"; #here you can apply your logic by putting if else blocks

    # ....
}