perl - 在 perl 中读取或写入文件中特定行的最佳方法是什么?

标签 perl file

我正在尝试读取文件的最后一行。 并且有许多方法可用于读取文件的特定行。

首先:

  @array=<FILE_HANDLE>;
    $line=(reverse @array)[0];

第二个:ReadBackwards包

$bw = File::ReadBackwards->new( 'log_file' ) or
                        die "can't read 'log_file' $!" ;
 $log_line = $bw->readline;

我想知道在 perl 中哪种方法更可取,是否使用 package 或将整个文件内容存储到变量中。

最佳答案

您的标题提出的问题与您的 body 提出的问题不同。

要从任意大的文件中读取最后一行(或从最后一行开始的第 n 行),绝对要使用 File::ReadBackwards。

要读取或写入文件中的任意一行,请使用 Tie::File:

use Tie::File;
tie my @line, 'Tie::File', 'filename' or die "unable to open filename: $!";
print "line 123 is $line[123].";
$line[42] = 'abc';
print "line 42 is now abc.";

对于大文件,这将比 File::ReadBackwards 昂贵得多,因为它需要通读整个文件直到您要修改的行(或者通读整个文件,如果使用负索引,所以如果你这样做,你最好使用 File::ReadBackwards 然后手动更新文件)。

关于perl - 在 perl 中读取或写入文件中特定行的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38767284/

相关文章:

javascript - 预编译后缺少 Rails javascript Assets

Javascript 文件验证总是返回 false

Windows CMD 按名称搜索和删除文件

windows - 如何使用 Powershell 搜索 Windows 搜索索引文件

linux - 未经授权的 Perl 脚本

perl - 是否可以在不写入的情况下检查 TCP 连接是否断开?

perl - 如何从十六进制时间获得纳秒粒度?

perl DateTime 和不存在的时间用户输入,因为 DST 时钟向前

perl - 格式化日期的简单方法

c# - 配置 IIS 或 Web.config 以仅提供特定文件夹中的所有文件