【发布时间】:2012-01-10 21:36:59
【问题描述】:
如果我创建新的 Term::Readline 对象(并传递 binmoded STDIN 和 STDOUT),输入和输出会被模拟。示例:
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use utf8::all;
use Term::ReadLine;
my $X = <>;
chomp $X;
say "õ $X";
my $term = new Term::ReadLine ('test', \*STDIN, \*STDOUT);
say "õ $X";
$X = <>;
chomp $X;
say "õ $X";
__END__
got:
õ
õ õ
� �
õ
� õ
如果我输入了拉丁语 1 中不存在的字符,我会收到“宽字符”警告并且输出会更好,但仍然不正确:
ž
õ ž
Wide character in print at db.test.pl line 20, <> line 1.
õ ž
ž
� ž
使用 Term::Readline 时如何正确设置 IO?
【问题讨论】:
-
您的区域设置是什么?没有 Term::ReadLine 是否一切正常?如果在加载 utf8::all 之前创建 Term::ReadLine 对象会发生什么?通过正常的调试工作来隔离问题。
-
我们中的一些人似乎无法重现您的错误。您能详细介绍一下您的设置吗?
-
@brian d foy:区域设置为
et_EE.UTF-8。当我注释掉对象创建行时,一切正常。上面的例子是隔离更大问题的产物。当我在创建对象后require utf8::all;时,一切正常。这看起来很奇怪,因为第一个 IO 是在没有设置正确编码的情况下进行的。 -
@Alex Reynolds:我的 Perl 在 Kubuntu 11.10 上是 5.12.4,
utf8::all是 0.002,Term::Readline是 1.05,T::RL::Gnu 是 1.2。我昨天升级到 Kubutu 11.10,在此之前我有 Perl 5.10.1,它可以工作。我也应该在其他电脑上试试... -
问题出现在
Term::ReadLine:Gnu。我在类似的平台上试过,只是没有::Gnu,一切正常。安装Term::ReadLine:Gnu后我又出现了错误行为。