Perlで矢印キーを取得する

Perlで矢印キーを取得するにはTerm::ReadKeyを使えば良いらしい。

Term::ReadKeyをインストール

コマンドライン

cpan Term::ReadKey

を実行してイントールする。

インストールが完了したらPerlでキー入力を取得してみる。

  1 #!/usr/local/bin/perl
  2 
  3 use Term::ReadKey;
  4 
  5 ReadMode 4;
  6 
  7 while( (my $key = ReadKey(0)) ne 'q') {
  8     #カーソルキー入力
  9     my $arrowkey = 0;
 10     if (ord($key) == 27) {
 11         my $code = ord(ReadKey -1);
 12         if ($code == 91) {
 13             my $arrowkey = ord(ReadKey -1);
 14             print "Press-Key Left\n"        if ( $arrowkey == 68 );
 15             print "Press-Key Right\n"       if ( $arrowkey == 67 );
 16             print "Press-Key Up\n"          if ( $arrowkey == 65 );
 17             print "Press-Key Down\n"        if ( $arrowkey == 66 );
 18         }
 19     } else {
 20         print "Press-Key $key\n";
 21     }
 22 }

7行目 $key=ReadKey(0)で$keyにキー入力データが入る。アルファベットや数字はそのまま文字として$keyに格納されるので(q)キーが押されるまでループする。

10-12行目は矢印キーが入力されたかのチェック。矢印キーはエスケープ文字であるのでこのように順に処理していくらしい。

 

実行して、a b c カーソル右 カーソル上 カーソル左 カーソル下を入力すると、

Press-Key a
Press-Key b
Press-Key c
Press-Key Right
Press-Key Up
Press-Key Left
Press-Key Down