что правильный путь состоит в том, чтобы получить здесь красивый вывод (все строки тот же отступ)?
#!/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. Однако, вы не включили использование utf8;
в скрипте. Таким образом, он интерпретирует каждый из немецких символов не-ASCII как два символа и устанавливает соответствующую подкладку. Но терминал, на котором вы работаете, также находится в режиме UTF-8, поэтому символы печатаются правильно. Попробуйте добавить с помощью предупреждений;
и я готов поспорить, что вы получите предупреждение на печать, и я не удивлюсь, если добавление с помощью utf8;
на самом деле исправит проблему.