如何将UTF-8字符串与Perl的printf正确对齐?

前端之家收集整理的这篇文章主要介绍了如何将UTF-8字符串与Perl的printf正确对齐?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是正确的方式来获得一个美丽的输出(所有行相同的缩进)?

#!/usr/bin/env perl
use warnings;
use strict;
use DBI;

my $phone_book = [ [ qw( name number ) ],[ 'Kroner',123456789 ],[ 'Holler',[ 'Mühßig',[ 'Singer',[ 'Maurer',];

my $dbh = DBI->connect( "DBI:CSV:",{ RaiseError => 1 } );
$dbh->do( qq{ CREATE TEMP TABLE phone_book AS IMPORT( ? ) },{},$phone_book );

my $sth = $dbh->prepare( qq{ SELECT name,number FROM phone_book } );
$sth->execute;

my $array_ref = $sth->fetchall_arrayref();

for my $row ( @$array_ref ) {
    printf "%9s %10s\n",@$row;
}

# OUTPUT:

#   Kroner  123456789
#   Holler  123456789
# Mühßig  123456789
#   Singer  123456789
#   Maurer  123456789

解决方法

我无法重现它,但松散地说,似乎正在发生的是它是一个编码不匹配的字符.很可能您的Perl源文件已保存为UTF-8编码.但是你没有启用使用utf8;在脚本中.因此,它将每个非ASCII德语字符解释为两个字符并相应地设置填充.但是您运行的终端也处于UTF-8模式,因此字符打印正确.尝试添加使用警告;而且我敢打赌你会收到警告,如果加上使用utf8,我也不会感到惊讶;实际上解决了这个问题.

猜你在找的Perl相关文章