たつをの日記 - 1999年5月8日

Perl でファイルの末尾から指定された行数を取り出す
UNIX の tail コマンドはファイルの末尾から指定された行だけ取り出してく れる便利なコマンドである。 このような作業を perl のプログラム中でやるサブルーチンを作成した。 今までは、tail コマンドを perl から呼び出すという方法 (バッククオート(`) で UNIX コマンドを呼び出す) だったのだが、 今回作成したサブルーチンでも実行速度は変わらなかったので、 今後はなるべくこちらを使うことにした。 まあ、もちろん、時と場合によるけどね。

説明するほどのものではないけど処理の概要を以下にあげておきます。 実際の実装はちょっと違うけどね。

  1. seek でファイル末尾から1ブロック分手前にポイントをセット
  2. read で 1ブロック読み込み、行数カウント/表示/格納等の処理を行う
  3. seek で 2ブロック分手前にポイントを移動
  4. [2] へ
1 ブロックのサイズは適当に決める。