0

术语::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:

为什么我到这里不是一些奇怪的迹象而是?

4

2 回答 2

3

简而言之,Term::ReadKey 假定 Unixy 终端,Windows 不提供(除非您使用 Cygwin)。

你可以试试Win32::Console。或者可能有一些咒语可以让 Term::ReadKey 工作——祝你好运。

于 2012-04-16T17:08:12.337 回答
1

您无法从为您提供字符的界面中获取密钥。这就是为什么你有一大堆东西一个键。

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

在 Windows 中,您可以自己获取密钥,但显然不能像显然那样从为您提供字符的界面中获取ReadKey

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

于 2012-04-16T19:20:23.527 回答