7

Perl 6 モジュールTerm::termiosを使用しています。

#!/usr/bin/env perl6
use v6;
use Term::termios;

my $saved_termios := Term::termios.new(fd => 1).getattr;
my $termios := Term::termios.new(fd => 1).getattr;
$termios.makeraw;
$termios.setattr(:DRAIN);

loop {
   my $c = $*IN.getc;
   print "got: " ~ $c.ord ~ "\r\n";
   last if $c eq 'q';
}

$saved_termios.setattr(:DRAIN);

このスクリプトを実行してup-arrow, down-arrow,のキーを押すとright-arrow、次の出力が表示されます。left-arrowq

#after arrow-up:
got: 27
got: 91

#after arrow-down:
got: 65
got: 27
got: 91

#after arrow-right:
got: 66
got: 27
got: 91

#after arrow-left:
got: 67
got: 27
got: 91

#after q:
got: 68

#after another q:
got: 113

しかし、私は期待していたでしょう:

#after arrow-up:
got: 27
got: 91
got: 65

#after arrow-down:
got: 27
got: 91
got: 66

#after arrow-right:
got: 27
got: 91
got: 67

#after arrow-left:
got: 27
got: 91
got: 68

#after q:
got: 113

目的の出力を得るには、スクリプトをどのように変更する必要がありますか?

4

1 に答える 1

3

コードの残りの部分を置き換えmy $c = $*IN.getc;my $c = $*IN.read(1);、文字列ではなくバッファを処理するように変更します。

于 2015-10-16T16:34:05.417 に答える