You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl调试器中UTF-8文本输出问题:消警告与正常显示

Perl调试器宽字符问题解决方案

测试代码

#!/usr/bin/perl

use utf8;
use strict;
use warnings;

my $var = 'Здравствуйте';

print $var;

调试运行场景

$ perl -d ./test.pl
Loading DB routines from perl5db.pl version 1.55
Editor support available.

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

main::(./test.pl:7):    my $var = 'Здравствуйте';
  DB<1> p $var

Wide character in print at (eval 8)[/usr/share/perl/5.30/perl5db.pl:738] line 2.
 at (eval 8)[/usr/share/perl/5.30/perl5db.pl:738] line 2.
    eval 'no strict; ($@, $!, $^E, $,, $/, $\, $^W) = @DB::saved;package main; $^D = $^D | $DB::db_stop;
print {$DB::OUT}   $var;
' called at /usr/share/perl/5.30/perl5db.pl line 738
    DB::eval called at /usr/share/perl/5.30/perl5db.pl line 3138
    DB::DB called at ./test.pl line 9
Здравствуйте

  DB<2> x $var
0  '\x{0417}\x{0434}\x{0440}\x{0430}\x{0432}\x{0441}\x{0442}\x{0432}\x{0443}\x{0439}\x{0442}\x{0435}'

1. 消除p命令的“Wide character in print”警告

这个警告是因为调试器的输出句柄$DB::OUT未设置UTF-8编码,导致宽字符输出时触发检查。有两种处理方式:

  • 临时生效(仅当前调试会话)
    在调试器提示符下执行:
DB<1> binmode $DB::OUT, ':utf8'

之后再用p $var就能正常输出,不会再弹出警告。

  • 永久生效(所有调试会话)
    创建或编辑用户主目录下的.perldb文件,添加以下内容:
$DB::OUT->binmode(':utf8');

每次启动调试器时会自动应用这个编码设置。

2. 让x命令显示原文本而非Unicode编码

x命令底层依赖Data::Dumper模块,默认会把非ASCII字符转义成Unicode编码格式。调整相关参数就能显示原文本:

  • 临时生效(仅当前会话)
    在调试器中执行:
DB<1> $DB::pretty = 1

或者更精准地控制Data::Dumper的输出:

DB<1> $Data::Dumper::Useqq = 0; $Data::Dumper::Terse = 1; $Data::Dumper::Indent = 0

设置完后再执行x $var,就能看到:

0  'Здравствуйте'
  • 永久生效(所有会话)
    在.perldb文件中添加:
$DB::pretty = 1;
# 或者使用Data::Dumper的具体配置
$Data::Dumper::Useqq = 0;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 0;

内容的提问来源于stack exchange,提问作者user4035

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:13:13