2

我正在将文本文件读入 perl 中的数组并循环遍历数组以对其进行处理。每当有“开始”、“结束”或“;” 在文本中的任何地方,我希望我的数组元素在此处结束,并且任何这些关键字之后的任何内容都将出现在下一个元素中,以便稍后尝试理解这些元素时让我的生活更轻松。

为了实现这一点,我想将整个文件读入一个数组,将所有“begin”替换为“begin\n”,将“end”替换为“end\n”和“;” 使用“;\n”,将此数组写回文件,然后将该文件读回数组。这行得通吗?

有没有更优雅的方法来做到这一点,而不是使用凌乱的额外写入和读取文件?

有没有办法缩短读取文件句柄和写入文件句柄(在电路意义上,如果你知道我的意思!),这样我就可以逃避对文本文件的整个写入,但仍然可以完成我的工作?

古鲁拉杰

4

2 回答 2

2

您可以使用split带括号将分隔符保留在结果中:

open my $FH, '<', 'file.txt' or die $!;
my @array = map { split /(begin|end|;)/ } <$FH>;
于 2012-05-29T11:55:34.420 回答
1

我更喜欢使用 Perl 单行代码并完全避免操作数组:

$ perl -pi -e 's#(?<=begin)#\n#g; s#(?<=end)#\n#g; s#(?<=;)#\n#g;' file.txt
于 2012-05-29T11:58:44.483 回答