我有一个索引文件,它保持每个对象的索引用空行分隔。现在,我必须在每个对象上搜索关键字,如果存在,则转储到另一个文件,而不是从头开始重建整个索引。这段代码
###@files is an array that contains the list of packages in the index
open("FH", $indexfile) or die ;
my @linearray = <FH>;
close ("FH");
open (NFH, '>', "$tmpfile") or die "cannot create";
foreach my $pattern (@files)
{
if (my @matches = grep /$pattern/, @linearray) {
print NFH "@matches";
} else {
push @newpkgs,$pattern;
}
}
close (NFH);
但这不符合预期。如何将段落作为数组中的元素?
答案 0 :(得分:2)
修改$ /
my @linearray;
{
open("FH", $indexfile) or die ;
local $/ = '';
@linearray = <FH>;
close ("FH");
print Dumper @linearray;
}
这将为您提供所需的输出。
我使用大括号{}来限制字段记录分隔符修改的范围,直到将对象读取到数组。您可以根据自己的要求进行扩展。