Term :: ReadKey :: ReadKey:为什么MS Windows的行为与Linux不同?

时间:2012-04-16 16:52:32

标签: perl keyboard terminal

Term::ReadKey

#!/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我得到两次输出:

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

当我按下Up“键”我得到

Enter a key: |  
|[|  
|A<  
END  

在Linux上,但在Windows上,脚本停止了:

Enter a key:

为什么我不会在这里找到一些奇怪的标志呢?

2 个答案:

答案 0 :(得分:3)

简单地说,Term :: ReadKey假定Unix不提供终端,Windows不提供(除非你使用Cygwin)。

您可以尝试使用Win32::Console。或者可能会有一些咒语让Term :: ReadKey起作用 - 祝你好运。

答案 1 :(得分:1)

您无法从提供角色的界面获取密钥。这就是为什么你为一把钥匙买了很多东西的原因。

在unix端,键被转换为特定于终端的内联转义序列,你必须自己弄明白。

在Windows中,您可以自己获取密钥,但显然不是来自提供像ReadKey这样的字符的界面。

我最近showed如何在Windows中获取密钥。不知道如何在unix中这样做。