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

wes*_*ith 1 perl extract tar archive

我正在尝试使用大型".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;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

cjm*_*cjm 6

您将呼叫next置于您的内部if,因此仅在您解压缩文件时执行.$fil如果未提取文件,则在循环内部没有任何修改.

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

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