昔書いた
print reverse(<FILE>);
と同じことを省メモリで実現するコードを挙げておきます。

ちょっといじれば大量のデータを全部逆順に表示させたい
時なんかに役に立つでしょう。

------------------------------------
#!/usr/local/bin/perl

$bufsize = 1024; # ここの値は適当に変える

open(FILE,$ARGV[0]) || die;
$size = -s FILE || exit; # ファイルサイズ取得。
# $pos: FileSizeをBufferSizeで割った値の小数点以下を切り上げた数
$pos = int($size / $bufsize) + ($size % $bufsize > 0);

while($pos--){
	seek(FILE, $bufsize * $pos, 0);
	read(FILE, $_, $bufsize);
	$_ .= $oldbuf;
	@lines = split(/\n/);
	$oldbuf = shift(@lines);
	next unless @lines;
	print join("\n", reverse @lines), "\n";
}
print "$oldbuf\n";
close(FILE);
__END__
------------------------------------

使い方:
上のコードをtac.plとすると、

% tac.pl FILENAME

で、FILENAMEの内容が逆順で表示される。