2012-04-16 39 views
0

Term::ReadKey术语:: 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我得到两次这样的输出:

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

当我按下Up “钥匙” 我得到

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

在Linux上,但在Windows上脚本停顿:

Enter a key: 

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

回答

3

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

您可以尝试使用Win32::Console。或者有些术语可能会使Term :: ReadKey发挥作用 - 祝你好运。

+0

该文档听起来更加乐观:“其中一个主要目标是让功能尽可能便携,因此您可以在任何体系结构中插入”使用Term :: ReadKey“,并具有良好的工作可能性。 ' – 2012-04-16 17:56:00

1

您无法从提供字符的界面获取密钥。这就是为什么你为一把钥匙获得了一大堆东西。

在unix方面,密钥已转换为特定于终端的内联转义序列,您必须自己弄清楚。

在Windows中,你可以自己拿到钥匙,但显然不是从一个界面给你像ReadKey这样的字符。

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

相关问题