2012-04-16 7 views
0

Term::ReadKeyTerm :: ReadKey :: ReadKey:なぜMS WindowsはLinuxとは異なる動作をするのですか?

#!/usr/bin/env perl 
use warnings; 
use 5.012; 
use Term::ReadKey; 

my $key; 

ReadMode 4; 
print "Enter a key: "; 
$key = ReadKey(); 
printf "|%s|\n", $key // 'undef'; 
$key = ReadKey(-1); 
printf "|%s|\n", $key // 'undef'; 
$key = ReadKey(-1); 
printf "|%s|\n", $key // 'undef'; 
ReadMode 0; 

say "END"; 

私はWindowsまたはLinux上でこのスクリプトを実行すると、プレスkが、私はこの出力の両方の時間を得る:私はUp "キー" を押すと

Enter a key: |k| 
|undef| 
|undef| 
END 

私は

を取得
Enter a key: | 
|[| 
|A< 
END 

(Linux)ただし、Windowsではスクリプトが停止するようになりました。

なぜ私はここに奇妙な兆候がないのですか?

答えて

3

簡単に言えば、Term :: ReadKeyはWindowsが提供していないUnixy端末を想定しています(Cygwinを使用しない限り)。

代わりにWin32::Consoleを試してみるとよいでしょう。または、Term :: ReadKeyを動作させる呪文があるかもしれません。

+0

ドキュメンテーションは楽観的に聞こえます。「主要な目標の1つは、できるだけ移植性の高い機能を持たせることです。したがって、どのアーキテクチャでもTerm :: ReadKeyを使用してプラグインするだけでよいでしょう。 ' –

1

文字を与えるインターフェイスからキーを取得することはできません。だから、あなたは1つの鍵のためにたくさんのものを持っています。

UNIX側では、キーは端末固有のインラインエスケープシーケンスに変換されており、自分自身を把握する必要があります。

Windowsでは、キー自体は取得できますが、明らかにReadKeyのような文字が表示されるインターフェイスからは表示されません。

私は最近showed Windowsでキーを取得する方法。どのようにUNIX上でそうするのか分かりません。

関連する問題