in reply to Grabbing input - every char, not after <Enter>

Term::ReadKey does what you ask, but there's also Term::ReadLine::Gnu which includes completion

As an example of Term::ReadKey, here's a subroutine I wrote some time ago that waits until Y, N, R or Q is pressed:

sub get_YNRQ { while (1) { ReadMode 4; my $ans = uc(ReadKey(0)); ReadMode 0; return $ans if $ans =~ m/[YNRQ]/; } }

update: added example code