====== Text::Table ======
example: center align and Unicode output
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Text::Table ();
binmode STDOUT, ':encoding(utf8)';
my @cols = qw/First Last/;
push @cols,
+{
title => "Country",
align => "center",
};
my $sep = \'│';
my $major_sep = \'║';
my $tb = Text::Table->new( $sep, " Number ", $major_sep,
( map { +( ( ref($_) ? $_ : " $_ " ), $sep ) } @cols ) );
my $num_cols = @cols;
$tb->load( [ 1, "Mark", "Twain", "USA", ] );
$tb->load( [ 2, "Charles", "Dickens", "Great Britain", ] );
$tb->load( [ 3, "Jules", "Verne", "France", ] );
my $make_rule = sub {
my ($args) = @_;
my $left = $args->{left};
my $right = $args->{right};
my $main_left = $args->{main_left};
my $middle = $args->{middle};
return $tb->rule(
sub {
my ( $index, $len ) = @_;
return ( '─' x $len );
},
sub {
my ( $index, $len ) = @_;
my $char = (
( $index == 0 ) ? $left
: ( $index == 1 ) ? $main_left
: ( $index == $num_cols + 1 ) ? $right
: $middle
);
return $char x $len;
},
);
};
my $start_rule = $make_rule->(
{
left => '┌',
main_left => '╥',
right => '┐',
middle => '┬',
}
);
my $mid_rule = $make_rule->(
{
left => '├',
main_left => '╫',
right => '┤',
middle => '┼',
}
);
my $end_rule = $make_rule->(
{
left => '└',
main_left => '╨',
right => '┘',
middle => '┴',
}
);
print $start_rule, $tb->title,
( map { $mid_rule, $_, } $tb->body() ), $end_rule;
This emits the following output:
┌────────╥───────┬───────┬─────────────┐
│ Number ║ First │ Last │Country │
├────────╫───────┼───────┼─────────────┤
│1 ║Mark │Twain │ USA │
├────────╫───────┼───────┼─────────────┤
│2 ║Charles│Dickens│Great Britain│
├────────╫───────┼───────┼─────────────┤
│3 ║Jules │Verne │ France │
└────────╨───────┴───────┴─────────────┘