use 5.010; use AnyEvent; use Term::ReadKey qw(ReadMode ReadKey); ReadMode('cbreak'); my %events; %events = ( key => AE::io(*STDIN, 0, sub { for (ReadKey) { when ('q') { ReadMode('normal'); $events{quit}->send; } when ("\n") { say 'ZOMG, ENTER!'; } default { say } } }), quit => AE::cv, ); $events{quit}->recv;