Text::ASCIITableによるアスキーテーブルレイアウト

MySQLの出力結果みたいなのが必要になったのでCPAN漁ってたらこんなの発見。

Text::ASCIITable - Create a nice formatted table using ASCII characters. - metacpan.org

地味に凄いめちゃ便利

use Text::ASCIITable;

my @rows = (
    [1,'foo','2011-03-16 11:22:33'],
    [2,'hogehogehoge','2011-03-17 11:22:33'],
    [3,'uwaaaaa','2011-03-18 11:22:33'],
    [4,'dio','2011-03-19 11:22:33'],
    [5,'jojo','2011-03-20 11:22:33'],
);

my $t = Text::ASCIITable->new();
$t->setCols('id','name','created');
$t->addRow($_) for @rows;
print $t;
 $ perl asciitable.pl
 .-----------------------------------------.
 | id | name         | created             |
 +----+--------------+---------------------+
 |  1 | foo          | 2011-03-16 11:22:33 |
 |  2 | hogehogehoge | 2011-03-17 11:22:33 |
 |  3 | uwaaaaa      | 2011-03-18 11:22:33 |
 |  4 | dio          | 2011-03-19 11:22:33 |
 |  5 | jojo         | 2011-03-20 11:22:33 |
 '----+--------------+---------------------'

いいですねー。

あとサクサクっとハッシュ配列構造のデータを出力する場合はこんなかんじか

use Text::ASCIITable;

my @rows = (
    {'id' => 1,'name' => 'foo', 'created' => '2011-03-16 11:22:33'},
    {'id' => 2,'name' => 'hogehogehoge','created' => '2011-03-17 11:22:33'},
    {'id' => 3,'name' => 'uwaaaaa','created' => '2011-03-18 11:22:33'},
    {'id' => 4,'name' => 'dio','created' => '2011-03-19 11:22:33'},
    {'id' => 5,'name' => 'jojo','created' => '2011-03-20 11:22:33'},
);

if ( @rows ) {
    my @keys = keys %{$rows[0]};
    my $t = Text::ASCIITable->new();
    $t->setCols(@keys);
    $t->addRow(@$_{@keys}) for @rows;
    print $t;
}

いいですねー。

他にもオプション等で色々指定できるみたいですが、とりあえずこれだけできりゃもうおkですね。