へっぽこ社会人4年生がプログラミングを頑張る

へっぽこ社会人4年目がプログラミング系統を中心に書きたいことをつらつらと書きます

Perlでファイルを逆順に読む

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
$

newFile::ReadBackwardsインスタンスを生成します。 その後、ファイルが読める間、1行ずつ取得し、変数$lineに格納します。 $lineにファイルの1行が読み込まれたら出力します。 最後は言わずもがな、後始末でcloseします。

今回はFile::ReadBackwardsのコンストラクタとメソッドreadlineのみを用いましたが、他にもいくつかメソッドはあります。 ただ、基本的に操作はそんなに変わらないので、これだけでも十分かなと思います。 詳細は、CPANFile::ReadBackwardsを参照してください。