Although possibly not terribly efficient, I like the idea of using 2 file handlers, it makes the code quite simple. But I would change it to something like this:
open my $INPUT, "<", $ARGV[0] or die "I couldn't get at input text";
open my $SAME_INPUT, "<", $ARGV[0] or die "I couldn't get at input tex
+t";
my $offset = $ARGV[1];
my $line = <$INPUT> for (1..$offset); # discard the n first lines, can
+'t do anything with them anyway
while (<$INPUT>) {
$line = <$SAME_INPUT>;
print $line if /$regex/;
}
There is also the alternative of slurping the file into an array and walking through the array. Reading the minus $n line is then trivial.