使用Perl从巨大的Archive中提取Single

时间:2013-09-21 17:14:04

标签: perl extract archive tar

我正在尝试使用大型“.tgz”文件中的单个文件。我正在使用Archive::Tar::Streamed模块。

以下是示例代码。

my $tar2 = Archive::Tar::Streamed->new($filename);
$fil = $tar2->next;
while($fil) {
   $_ = $fil->name;
   if(m/abc\.txt/g) {
      $fil->extract($outpath);
      $fil = $tar2->next;
   }
}

但是迭代器不起作用。它循环存档中的第一个文件而不是移动到下一个文件。 谁能告诉我我在这里做了什么错误???

1 个答案:

答案 0 :(得分:6)

您将next内的来电置于if内,因此只有在您解压缩文件时才会执行此操作。如果没有提取文件,那么在循环内部修改$fil没有任何内容。

只需在while循环的条件下调用迭代器,就可以简化代码。此外,您可以使用=~ binding operator而不是将名称存储在$_中。你想要/g正则表达式修饰符。在标量上下文中,您使用/g循环遍历字符串中的多个匹配项。在这里,你想要的只是知道字符串是否包含匹配。

my $tar2 = Archive::Tar::Streamed->new($filename);
while(my $fil = $tar2->next) {
   if($fil->name =~ m/abc\.txt/) {
      $fil->extract($outpath);
   }
}