[Edit][Create New]
[ IndexPage / ネットとプログラミング / CGI / 便利なスクリプト片(未整理) / tail2.pl ]

tail2.pl

#!/usr/local/bin/perl

$tail = 100;      # ここを変えると複数行取れる
$bufsize = 1024; # バッファサイズ。ここの値は適当に変える
$buf = "";

open(FILE,$ARGV[0]) || die;

$size = -s FILE || exit; # ファイルサイズ取得。0なら正常終了

# $pos: FileSizeをBufferSizeで割った値の小数点以下を切り上げた数
$pos = int($size / $bufsize) + ($size % $bufsize > 0);

while($pos--){
    seek(FILE, $bufsize * $pos, 0);
    read(FILE, $_, $bufsize);
    $buf = "$_$buf";
    # 改行数が取出し行数を越えたらループから抜ける
    last if (($buf =~ tr/\n/\n/) > $tail);
}
close(FILE);

# 読み過ぎた部分を取り除く
$pos2 = length $buf;
foreach (1 .. $tail+1) {
    $pos2 = rindex $buf, "\n", $pos2;
    $pos2--;
}
$buf = substr $buf, $pos2 + 2;

print $buf;
__EOF__