Here's two creative ways - slurp the whole file, then use regex lookahead to get the "next" line,
or use tell() and seek() to read ahead then reset the current file position.
#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11135401
use warnings;
open my $fh, '<', \<<END or die;
line one
line two
line three
line four
line five
END
{
local $/;
local $_ = <$fh>;
while( /^(.*)\n(?=(.*))/gm )
{
print "$1 -> $2\n";
}
}
print "\n";
seek $fh, 0, 0; # reset for different example
while( <$fh> )
{
chomp;
my $pos = tell $fh;
print"$_ -> ", (<$fh> // "AT LAST LINE\n");
seek $fh, $pos, 0;
}
Outputs:
line one -> line two
line two -> line three
line three -> line four
line four -> line five
line five ->
line one -> line two
line two -> line three
line three -> line four
line four -> line five
line five -> AT LAST LINE