- 论坛徽章:
- 7
|
我的 V2:
- #!/usr/bin/perl
- sub table {
- my %i = ( align => 1, title => '', space => 1, samewidth => 1 );
- @_ % 2 ? do { $i{data} = shift } : do { %i = ( %i, @_ ) };
- my ( $p, $t, $c, $w ) = @i{qw/align title space samewidth/};
- my @d = @{ $i{data} };
- my ( $l, $s, $e, @l, $L ) = ( 0, $" x $c, scalar @{ $d[0] } );
- my %T = (
- b => [qw(: - :)],
- m => [qw(: + :)],
- h => '-', v => '|'
- );
-
- @l = $w
- ? do { map $l < $_ && ( $l = $_ ), map length, map @$_, @d; ($l+$c*2) x $e }
- : do { map {
- my ( $l, $a ) = ( 0, $_ );
- map $l < $_ && ( $l = $_ ), map length $d[$_][$a], 0 .. $#d; $l + $c * 2
- } 0 .. $e - 1 };
-
- $L += $_ for @l;
- $L += $e - 1;
-
- my ( $hm, $hb ) =
- map { $T{$_}[0].join( $T{$_}[1], map $T{h} x $_, @l )."$T{$_}[2]\n"
- } qw/m b/;
- my $title = "$T{v}$s$t".$" x ( $L - $c - length $t )."$T{v}\n";
- my $A = sub {
- my $i;
- map { my $x = $" x ( $l[$i++] - $c - length ); $p ? "$s$_$x" : "$x$_$s" } @_;
- };
- my $text = sub { $T{v} . join( $T{v}, $A->(@_) ) . "$T{v}\n" };
- $hb.( $t ? $title.$hb : '' ).join( $hm, map $text->(@$_), @d ).$hb;
- }
- my @a = map [split], <DATA>;
- print table \@a;
- print table data => \@a, align => 1, space => 0;
- print table data => \@a, samewidth => 0, title => 'Africa', align => 0, space => 1;
- __DATA__
- Abid Banjul Conakry Harare
- Accra Bissau Dakar Johanne
- Addis Blantyre Dar_es_Salaam Juba
- Algie Brazzaville Djibouti Kampala
复制代码 |
|