为什么Term :: Size似乎弄乱了Perl的输出编码?

时间:2010-03-21 13:48:49

标签: perl encoding module

Term :: Size-module混淆了编码。我该如何解决这个问题?

#!/usr/bin/env perl
use warnings; use strict;
use 5.010;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';
use Term::Size;

my $string = 'Hällö';
say $string;

my $columns = ( Term::Size::chars *STDOUT{IO} )[0];

say $columns;
say $string;

输出:

  


  140个
  H ll

2 个答案:

答案 0 :(得分:1)

获取列数后设置binmode似乎可以解决问题:

say $string;

my $columns = ( Term::Size::chars *STDOUT{IO} )[0];
binmode STDOUT, ':encoding(UTF-8)';

say $columns;
say $string;

输出

  


  80个
  喂


奇怪的是,这个代码可以正常使用perl 5.8(输出正确)而无需重置binmode

答案 1 :(得分:0)

或使用“chars”:

#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';
use Term::Size qw(chars);

my $string = 'Hällö';
say $string;

my $columns = ( chars )[0];

say $columns;
say $string;

输出:

  


  82个
  Hällö