#!/usr/bin/perl use Term::ReadKey; my %seqs = ( "\e[A" => "Up", "\e[B" => "Down", "\e[C" => "Right", "\e[D" => "Left", "\e[5~" => "PgUp", "\e[6~" => "PgDn", # ... ); ReadMode 4; # raw mode my $buf = ''; while (my $key = ReadKey()) { last if $key eq 'q'; # hit 'q' to quit loop $buf .= $key; $buf = substr($buf, -4); # keep last 4 bytes my $escseq = substr($buf,rindex($buf,"\e")); if (exists $seqs{$escseq}) { print "$seqs{$escseq}\n"; } } ReadMode 0; # reset tty