sub prompt { my( $prompt, $validator, $reprompt ) = @_; # Close out previous pager (if any): select STDOUT; close PAGER; # Prompt the user for a response: my $response; while( 1 ) { print STDERR $prompt; $response = ; die "End of input.\n" if ! defined $response; chomp $response; last if $validator->( $response ); $prompt = $reprompt; } # Run output (until next prompt) through pager: my $pager = $ENV{PAGER} || 'less'; open PAGER, '|-', $pager or die "Can't run $pager: $!\n"; select PAGER; return $response; }