用户工具

站点工具


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki