Perlでファイルを下から1行ずつ扱いたい時、File::ReadBackwards
モジュールが便利なんです。 まあ、頻繁に逆順で読むのか、というと、そうではないのですが、いざ逆順に読みたいという時には便利です。 標準ライブラリではないはずなので、CPANからインストールする必要があります。
使用例
以下のように記述されたファイルを考えます。
テキストファイル: fruits
apple banana cherry
fruits
の中身を下から1行ずつ表示するには、Perlで以下のように実装します。
Perlプログラム: rev.pl
#!/usr/bin/perl
use strict;
use warnings;
use File::ReadBackwards;
die "Usage: $0 file\n" unless @ARGV == 1;
my $bw = File::ReadBackwards($ARGV[0])
or die "Can't open file $ARGV[0]: $!\n";
while(my $line = $bw -> readline()) {
print $line;
}
$bw -> close();
実行結果は以下の通りになります。
$ perl rev.pl fruits
cherry
banana
apple
$
new
でFile::ReadBackwards
のインスタンスを生成します。 その後、ファイルが読める間、1行ずつ取得し、変数$line
に格納します。 $line
にファイルの1行が読み込まれたら出力します。 最後は言わずもがな、後始末でclose
します。
今回はFile::ReadBackwards
のコンストラクタとメソッドreadline
のみを用いましたが、他にもいくつかメソッドはあります。 ただ、基本的に操作はそんなに変わらないので、これだけでも十分かなと思います。 詳細は、CPANのFile::ReadBackwards
を参照してください。