#!/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__