【发布时间】:2011-01-19 07:53:32
【问题描述】:
在 Perl 中,我试图逐行读取文件并处理每一行,并根据需要对其进行修改。 到目前为止,我正在阅读能够做到这一点的唯一方法是将文件读入数组,根据需要修改数组的每个元素,然后在完成后将其输出回文件。
有没有更好的方法来做到这一点,也许我可以通过某种方式替换单行?
现在,我的处理代码如下所示:
while (my $line = <FILE>)
{
# process line here
# ...........
print FILE $line;
}
我的代码似乎非常接近,除了它在我当前所在的行之后替换了一行,所以似乎如果我可以将文件指针向上备份一行,它将写入正确的位置文件。
我在正确的轨道上吗?我需要从这里做什么来备份文件指针,以便它写入我正在读取的同一行?
编辑:
在我收到的答案中,使用local $^I 和Tie::File 效果很好。
我最终选择了Tie::File,这样我就不必打印出文件的每一行。这样,如果脚本中途发生了什么事,我的文件就不会被弄乱。
我的新代码如下所示:
use Tie::File;
chomp(my $filename = $ARGV[0]);
tie my @array, 'Tie::File', $filename or die $!;
foreach my $line(@array)
{
# ...... line processing happens here .......
# ...... $line is automatically written to file if $line is changed .......
}
【问题讨论】:
标签: perl