重新启动Perl调试后,非ASCII输出(Non-ASCII output after restar

2019-10-20 23:59发布

[ 编辑 :事实证明,这个问题的原始版本包含伪装成一个两个不同的问题。 (我只阅读和通过tripleee的评论工作后意识到了这一点)。因此,我拆了原来的问题一分为二。 我编辑这篇文章,包括我想通了,感谢tripleee的评论的问题,并张贴在第二个位置 。 顺便说一句,那第二合并后我带着对这个职位,即设置描述的问题修复STDOUT明确在脚本中的编码,使用binmode 。]


我将使用下面的简短的演示脚本来说明这个问题。

# -*- coding: utf-8 -*-
use strict;
use feature 'unicode_strings';
use POSIX 'locale_h';
use locale;
use utf8;

setlocale( LC_CTYPE, 'de_DE.UTF-8' );

my $non_ascii = 'ßäöüÄÖÜ';
print "$non_ascii\n";

my @non_ascii = split //, $non_ascii;
print "$_\n" for @non_ascii;

$DB::single = 1; 1;  # return control to DB

(最后一行实际上是一个断点。)

好了,现在我的Perl调试器下运行这样的:

% perl -C -d dbtest.pl

Loading DB routines from perl5db.pl version 1.37
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(dbtest.pl:8):            setlocale( LC_CTYPE, 'de_DE.UTF-8' );
  DB<1> c
ßäöüÄÖÜ
ß
ä
ö
ü
Ä
Ö
Ü
main::(dbtest.pl:17):           $DB::single = 1; 1;  # return control to DB
  DB<1> 

到目前为止好:脚本产生预期的输出,现在调试已进入单步模式,并等待输入。

如果我现在只是重新启动与调试R以及(与再次运行该脚本c 与之前完全相同 ),这是发生了什么:

  DB<1> R
Warning: some settings and command-line options may be lost!

Loading DB routines from perl5db.pl version 1.37
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(dbtest.pl:8):            setlocale( LC_CTYPE, 'de_DE.UTF-8' );
  DB<1> c
\337\344\366\374\304\326\334
\337
\344
\366
\374
\304
\326
\334
main::(dbtest.pl:17):           $DB::single = 1; 1;  # return control to DB
  DB<1>

此外,现在print不再产生人类可读输出:

  DB<1> print $non_ascii
\337\344\366\374\304\326\334

如何才能保持输出寻找人类可读的重新启动后?

文章来源: Non-ASCII output after restarting the Perl debugger