First of all, you don't want Tie::File. You never want Tie::File. It can easily end up using more memory than just loading the entire file into memory (despite the goal of limiting memory usage), and it's orders of magnitude slower than the alternatives.
The following is a solution using tail as you suggested:
open(my $fh, '|-', "tail", "-n", "+$InStartLineNumber", $InLogFIlePath
+)
or die("Can't tail \"$InLogFIlePath\": $!\n");
while (<$fh>) {
...
}
close($fh);
if ( $? == -1 ) { die "Can't tail \"$InLogFIlePath\": $!\n"); }
if ( $? & 0x7F ) { die "Can't tail \"$InLogFIlePath\": Killed by signa
+l ".( $? & 0x7F )."$!\n"); }
if ( $? >> 8 ) { die "Can't tail \"$InLogFIlePath\": Exited with err
+or ".( $? >> 8 )."$!\n"); }
However, there's no reason to involve tail when you can easily do the same thing must more cleanly in Perl.
open(my $fh, '<', $InLogFIlePath)
or die("Can't open \"$InLogFIlePath\": $!\n");
while (<$fh>) {
next if $. < $InStartLineNumber;
...
}