获得漂亮输出的正确方法是什么(所有行都缩进相同)?
#!/usr/bin/env perl
use warnings;
use strict;
use DBI;
my $phone_book = [ [ qw( name number ) ],
[ 'Kroner', 123456789 ],
[ 'Holler', 123456789 ],
[ 'Mühßig', 123456789 ],
[ 'Singer', 123456789 ],
[ 'Maurer', 123456789 ],
];
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 编码。但是您还没有启用 use utf8;
在脚本中。因此,它将每个非 ASCII 德语字符解释为两个字符并相应地设置填充。但是您运行的终端也是 UTF-8 模式,因此字符可以正确打印。尝试添加 use warnings;
我敢打赌你会打印一个警告,如果添加 use utf8;
我不会感到惊讶实际上解决了问题。
关于perl - 如何将 UTF-8 字符串与 Perl 的 printf 正确对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2064543/