Наиболее эффективным способом было бы поискать конец файла, затем постепенно читать сегменты, подсчитывая количество новых строк в каждом, а затем использовать truncate (см. Perldoc -f truncate) для его обрезки. На CPAN также есть модуль или два для чтения файла в обратном направлении.