linux:perl:cpan:text-table
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 │ └────────╨───────┴───────┴─────────────┘
linux/perl/cpan/text-table.txt · 最后更改: 2023/03/17 10:12 由 127.0.0.1