以下は、SQL クエリを整列テキスト テーブル形式にダンプするコードです。
sub sql_command {
my ($self,$str) = @_;
my $s = $self->{_db}->prepare($str) or die $!;
$s->execute() or die $!;
my $table;
push @$table, [ map { defined $_ ? $_ : "undef" } @{$s->{'NAME'}}];
while(my $row = $s->fetch) {
push @$table, [ map{ defined $_ ? $_ : "undef" }@$row ];
}
return box_format($table);;
}
sub box_format {
my $table = shift;
my $n_cols = scalar @{$table->[0]};
my $tb = Text::Table->new(\'| ', '', (\' | ','')x($n_cols-1), \' |+');
$tb->load(@$table);
my $rule = $tb->rule(qw/- +/);
my @rows = $tb->body();
return $rule, shift @rows, $rule, @rows, $rule
if @rows;
}
出力は期待どおりです。ただし、パフォーマンスに関しては、約 5 MB のサイズの出力ファイルを処理するのに約 30 秒かかります。
パフォーマンスの点でそれを達成するためのより良い方法はありますか?
ありがとう!