Для быстрого и грязного можно передать текст меньше или больше:
my $text = <<'EOD';
Lots
and
lots
of
text
EOD
my $pager = $ENV{PAGER} || 'less';
open(my $less, '|-', $pager, '-e') || die "Cannot pipe to $pager: $!";
print $less $text;
close($less);
Существуют различные флажки "меньше / больше", позволяющие сценарию продолжаться, когда он достигает нижней части текста.