I like
eyepopslikeamosquito's way the best. Normally, I would build an index, but that can get tedious. You can build an index on the fly mentally by looking at
$lines[$#lines]. That's the last line, but, now shifting into reverse, the next to last line would be
$lines[$#lines-1] and so on until you get to the first line. For example, in this script there are 17 lines of the file being examined, so the first line would be
$lines[$#lines-16], and the last line would be
$lines[$#lines]. The script prints out the number of lines, the first line, and the last
line. Adjust for the first line accordingly:
#!/usr/bin/perl
use strict;
use warnings;
use Fcntl;
use Tie::File;
use File::CountLines qw(count_lines);
my $file = shift or die "usage: $0 file\n";
tie my @lines, 'Tie::File', $file, mode => O_RDONLY
or die "error: $!";
my $number_of_lines = count_lines($file);
print "Number of lines: $number_of_lines", "\n";
print $lines[$#lines-16], "\n";
print $lines[$#lines], "\n";