我正在尝试使用大型“.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;
}
}
但是迭代器不起作用。它循环存档中的第一个文件而不是移动到下一个文件。 谁能告诉我我在这里做了什么错误???
答案 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);
}
}