术语:: ReadKey :: ReadKey:为什么MS Windows的行为与Linux不同?
问题描述:
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:
为什么我在这里不是一些奇怪的标志呢?
答
简单地说,Term :: ReadKey假定Unixy终端,Windows不提供(除非你使用Cygwin)。
您可以尝试使用Win32::Console。或者有些术语可能会使Term :: ReadKey发挥作用 - 祝你好运。
答
您无法从提供字符的界面获取密钥。这就是为什么你为一把钥匙获得了一大堆东西。
在unix方面,密钥已转换为特定于终端的内联转义序列,您必须自己弄清楚。
在Windows中,你可以自己拿到钥匙,但显然不是从一个界面给你像ReadKey
这样的字符。
我最近showed如何在Windows中获取密钥。不知道如何在unix中这样做。
该文档听起来更加乐观:“其中一个主要目标是让功能尽可能便携,因此您可以在任何体系结构中插入”使用Term :: ReadKey“,并具有良好的工作可能性。 ' – 2012-04-16 17:56:00