package Acme::CPANModules::TextTable;

use 5.010001;
use strict;
use warnings;
use utf8;

our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2023-02-16'; # DATE
our $DIST = 'Acme-CPANModules-TextTable'; # DIST
our $VERSION = '0.014'; # VERSION

sub _make_table {
    my ($cols, $rows, $celltext) = @_;
    my $res = [];
    push @$res, [];
    for (0..$cols-1) { $res->[0][$_] = "col" . ($_+1) }
    for my $row (1..$rows) {
        push @$res, [ map { $celltext // "row$row.$_" } 1..$cols ];
    }
    $res;
}

our $LIST = {
    summary => 'Modules that generate text tables',
    description => <<'_',

Currently excluded from this list are:

- <pm:Text::SimpleTable::AutoWidth> (wrapper to <pm:Text::SimpleTable>);
- <pm:Text::ASCIITable::EasyTable> (wrapper to <pm:Text::ASCIITable>);

_
    entry_features => {
        wide_char => {summary => 'Whether the use of wide characters (e.g. Kanji) in cells does not cause the table to be misaligned'},
        color_data =>  {summary => 'Whether module supports ANSI colors (i.e. text with ANSI color codes can still be aligned properly)'},
        multiline_data => {summary => 'Whether module supports aligning data cells that contain newlines'},

        box_char => {summary => 'Whether module can utilize box-drawing characters'},
        custom_border => {summary => 'Whether module allows customizing border in some way'},

        align_row => {summary => "Whether module supports aligning text horizontally in a row (left/right/middle)"},
        align_column => {summary => "Whether module supports aligning text horizontally in a column (left/right/middle)"},
        align_cell => {summary => "Whether module supports aligning text horizontally in individual cells (left/right/middle)"},

        valign_row => {summary => "Whether module supports aligning text vertically in a row (top/bottom/middle)"},
        valign_column => {summary => "Whether module supports aligning text vertically in a column (top/bottom/middle)"},
        valign_cell => {summary => "Whether module supports aligning text vertically in individual cells (top/bottom/middle)"},

        rowspan => {summary => "Whether module supports row spans"},
        colspan => {summary => "Whether module supports column spans"},

        custom_color => {summary => 'Whether the module produces colored table and supports customizing color in some way'},
        color_theme => {summary => 'Whether the module supports color theme/scheme'},

        speed => {summary => "Rendering speed", schema=>'str*'},

        column_width => {summary => 'Whether module allows setting the width of columns'},
        per_column_width => {summary => 'Whether module allows setting column width on a per-column basis'},
        row_height => {summary => 'Whether module allows setting the height of rows'},
        per_row_height => {summary => 'Whether module allows setting row height on a per-row basis'},

        pad => {summary => 'Whether module allows customizing cell horizontal padding'},
        vpad => {summary => 'Whether module allows customizing cell vertical padding'},
    },
    entries => [
        {
            module => 'Text::Table::Any',
            description => <<'_',

This is a frontend for many text table modules as backends. The interface is
dead simple, following <pm:Text::Table::Tiny>. The main drawback is that it
currently does not allow passing (some, any) options to each backend.

_
            bench_code => sub {
                my ($table) = @_;
                Text::Table::Any::table(rows=>$table, header_row=>1);
            },
            features => {
                align_cell     => {value=>undef, summary=>"Depends on backend"},
                align_column   => {value=>undef, summary=>"Depends on backend"},
                align_row      => {value=>undef, summary=>"Depends on backend"},
                box_char       => {value=>undef, summary=>"Depends on backend"},
                color_data     => {value=>undef, summary=>"Depends on backend"},
                color_theme    => {value=>undef, summary=>"Depends on backend"},
                colspan        => {value=>undef, summary=>"Depends on backend"},
                custom_border  => {value=>undef, summary=>"Depends on backend"},
                custom_color   => {value=>undef, summary=>"Depends on backend"},
                multiline_data => {value=>undef, summary=>"Depends on backend"},
                rowspan        => {value=>undef, summary=>"Depends on backend"},
                speed          => {value=>undef, summary=>"Depends on backend"},
                valign_cell    => {value=>undef, summary=>"Depends on backend"},
                valign_column  => {value=>undef, summary=>"Depends on backend"},
                valign_row     => {value=>undef, summary=>"Depends on backend"},
                wide_char_data => {value=>undef, summary=>"Depends on backend"},
            },
        },

        {
            module => 'Text::SimpleTable',
            description => <<'_',

As its name implies, a simple table-generating module with minimal documentation
and a few choices or border characters. You have to set the width of all columns
manually.

_
            bench_code => sub {
                my ($table) = @_;
                my @colspec = map {[9, $_]} @{ $table->[0] };
                my $ts = Text::SimpleTable->new(@colspec);
                for (1 .. $#{$table}) { $ts->row(@{ $table->[$_] }) }
                $ts->draw;
            },
            features => {
                align_cell     => {value=>0},
                align_column   => {value=>0},
                align_row      => {value=>0},
                box_char       => {value=>0},
                color_data     => {value=>0},
                color_theme    => {value=>0},
                colspan        => {value=>0},
                custom_border  => {value=>1, summary=>"Limited choice of 1 ASCII style and 1 UTF style"},
                custom_color   => {value=>0},
                multiline_data => {value=>0},
                rowspan        => {value=>0},
                speed          => {value=>'fast', summary=>'Slightly slower than Text::Table::Tiny'},
                valign_cell    => {value=>0},
                valign_column  => {value=>0},
                valign_row     => {value=>0},
                wide_char_data => {value=>0},
            },
        },

        {
            module => 'Text::UnicodeBox::Table',
            description => <<'_',

The main feature of this module is the various border style it provides drawn
using Unicode box-drawing characters. It allows per-row style. The rendering
speed is particularly slow compared to other modules.

_
            bench_code => sub {
                my ($table) = @_;
                my $t = Text::UnicodeBox::Table->new;
                $t->add_header(@{ $table->[0] });
                $t->add_row(@{ $table->[$_] }) for 1..$#{$table};
                $t->render;
            },
            features => {
                align_cell => 0,
                align_column => 1,
                box_char => 0,
                color_data => 1,
                color_theme => 0,
                colspan => 0,
                custom_border => 1,
                custom_color => 0,
                multiline_data => 0,
                rowspan => 0,
                wide_char_data => 1,
                speed => "slow",
            },
        },

        {
            module => 'Text::Table::Manifold',
            description => <<'_',

Two main features of this module is per-column aligning and wide character
support. This module, aside from doing its rendering, can also be told to pass
rendering to HTML, CSV, or other text table module like
<pm:Text::UnicodeBox::Table>); so in this way it is similar to
<pm:Text::Table::Any>.

_
            bench_code => sub {
                my ($table) = @_;
                my $t = Text::Table::Manifold->new;
                $t->headers($table->[0]);
                $t->data([ @{$table}[1 .. $#{$table}] ]);
                join("\n", @{$t->render(padding => 1)}) . "\n";
            },
            features => {
                align_cell => 0,
                align_column => 1,
                box_char => undef, # ?
                color_data => 1,
                color_theme => 0,
                colspan => 0,
                custom_border => {value=>0, summary=>"But this module can pass rendering to other module like Text::UnicodeBox::Table"},
                custom_color => 0,
                multiline_data => 0,
                rowspan => 0,
                wide_char_data => 1,
            },
        },

        {
            module => 'Text::ANSITable',
            description => <<'_',

This 2013 project was my take in creating a text table module that can handle
color, multiline text, wide characters. I also threw in various formatting
options, e.g. per-column/row/cell align/valign/pad/vpad, conditional formatting,
and so on. I even added a couple of features I never used: hiding rows and
specifying columns to display which can be in different order from the original
specified columns or can contain the same original columns multiple times. I
think this module offers the most formatting options on CPAN.

In early 2021, I needed colspan/rowspan and I implemented this in a new module:
<pm:Text::Table::Span> (later renamed to <pm:Text::Table::More>). I plan to add
this feature too to Text::ANSITable, but in the meantime I'm also adding more
formatting options which I need to Text::Table::More.

_
            bench_code => sub {
                my ($table) = @_;
                my $t = Text::ANSITable->new(
                    use_utf8 => 0,
                    use_box_chars => 0,
                    use_color =>  0,
                    columns => $table->[0],
                    border_style => 'ASCII::SingleLine',
                );
                $t->add_row($table->[$_]) for 1..@$table-1;
                $t->draw;
            },
            features => {
                align_cell => 1,
                align_column => 1,
                align_row => 1,
                box_char => 1,
                color_data =>  1,
                color_theme => 1,
                colspan => 0,
                column_width => 1,
                custom_border => 1,
                custom_color => 1,
                multiline_data => 1,
                pad => 1,
                per_column_width => 1,
                per_row_height => 1,
                row_height => 1,
                rowspan => 0,
                speed => "slow",
                valign_cell => 1,
                valign_column => 1,
                valign_row => 1,
                vpad => 1,
                wide_char_data => 1,
            },
        },

        {
            module => 'Text::ASCIITable',
            bench_code => sub {
                my ($table) = @_;
                my $t = Text::ASCIITable->new();
                $t->setCols(@{ $table->[0] });
                $t->addRow(@{ $table->[$_] }) for 1..@$table-1;
                "$t";
            },
            features => {
                wide_char_data => 0,
                color_data =>  0,
                box_char => 0,
                multiline_data => 1,
            },
        },
        {
            module => 'Text::FormatTable',
            bench_code => sub {
                my ($table) = @_;
                my $t = Text::FormatTable->new(join('|', ('l') x @{ $table->[0] }));
                $t->head(@{ $table->[0] });
                $t->row(@{ $table->[$_] }) for 1..@$table-1;
                $t->render;
            },
            features => {
                wide_char_data => 0,
                color_data =>  0,
                box_char => 0,
                multiline_data => 1,
            },
        },
        {
            module => 'Text::MarkdownTable',
            bench_code => sub {
                my ($table) = @_;
                my $out = "";
                my $t = Text::MarkdownTable->new(file => \$out);
                my $fields = $table->[0];
                foreach (1..@$table-1) {
                    my $row = $table->[$_];
                    $t->add( {
                        map { $fields->[$_] => $row->[$_] } 0..@$fields-1
                    });
                }
                $t->done;
                $out;
            },
            features => {
                wide_char_data => 0,
                color_data =>  0,
                box_char => 0,
                multiline_data => {value=>0, summary=>'Newlines stripped'},
            },
        },
        {
            module => 'Text::Table',
            bench_code => sub {
                my ($table) = @_;
                my $t = Text::Table->new(@{ $table->[0] });
                $t->load(@{ $table }[1..@$table-1]);
                $t;
            },
            features => {
                wide_char_data => 0,
                color_data =>  0,
                box_char => {value=>undef, summary=>'Does not draw borders'},
                multiline_data => 1,
            },
        },
        {
            module => 'Text::Table::Tiny',
            description => <<'_',

The simple and tiny table-generating module which I liked back in 2012 (v0.03).
It employs an sprintf() trick to generate a single row. This module started my
personal experiments creating other table-generating modules (at last count I've
created no fewer than 15 of them!).

_
            bench_code => sub {
                my ($table) = @_;
                Text::Table::Tiny::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  1,
                box_char => 1,
                multiline_data => 0,
            },
        },
        {
            module => 'Text::Table::TinyBorderStyle',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::TinyBorderStyle::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 0,
                color_data =>  0,
                box_char => 1,
                multiline_data => 0,
            },
        },
        {
            module => 'Text::Table::More',
            description => <<'_',

A module I wrote in early 2021. Main distinguishing feature is support for
rowspan/clospan. I plan to add more features to this module on an as-needed
basic. This module is now preferred to <pm:Text::ANSITable>, although currently
it does not offer nearly as many formatting options as Text::ANSITable.

_
            bench_code => sub {
                my ($table) = @_;
                Text::Table::More::generate_table(rows=>$table, header_row=>1);
            },
            features => {
                align_cell => 1,
                align_column => 1,
                align_row => 1,
                box_char => 1,
                color_data =>  1,
                color_theme => 0,
                colspan => 1,
                custom_border => 1,
                custom_color => 0,
                multiline_data => 1,
                rowspan => 1,
                speed => "slow",
                valign_cell => 1,
                valign_column => 1,
                valign_row => 1,
                wide_char_data => 1,
                column_width => 0, # todo
                per_column_width => 0, # todo
                row_height => 0, # todo
                per_row_height => 0, # todo
                pad => 0, # todo
                vpad => 0, # todo
            },
        },
        {
            module => 'Text::Table::Sprintf',
            description => <<'_',

A performant (see benchmark result) and lightweight (a page of code, no use of
modules at all), but with minimal extra features.

_
            bench_code => sub {
                my ($table) = @_;
                Text::Table::Sprintf::table(rows=>$table, header_row=>1);
            },
            features => {
                box_char => 0,
                color_data =>  0,
                multiline_data => 0,
                speed => {value=>"fast", summary=>"The fastest among the others in this list"},
                wide_char_data => 0,
            },
        },
        {
            module => 'Text::Table::TinyColor',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::TinyColor::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 0,
                color_data =>  1,
                box_char => 0,
                multiline_data => 0,
            },
        },
        {
            module => 'Text::Table::TinyColorWide',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::TinyColorWide::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  1,
                box_char => 0,
                multiline_data => 0,
            },
        },
        {
            module => 'Text::Table::TinyWide',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::TinyWide::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  0,
                box_char => 0,
            },
        },
        {
            module => 'Text::Table::Org',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::Org::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 0,
                color_data =>  0,
                box_char => 0,
                multiline_data => 0,
            },
        },
        {
            module => 'Text::Table::CSV',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::CSV::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  0,
                box_char => {value=>undef, summary=>"Irrelevant"},
                multiline_data => {value=>1, summary=>"But make sure your CSV parser can handle multiline cell"},
            },
        },
        {
            module => 'Text::Table::HTML',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::HTML::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  {value=>0, summary=>'Not converted to HTML color elements'},
                box_char => 0,
                multiline_data => 1,
            },
        },
        {
            module => 'Text::Table::HTML::DataTables',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::HTML::DataTables::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  {value=>0, summary=>'Not converted to HTML color elements'},
                box_char => 0,
                multiline_data => 1,
            },
        },
        {
            module => 'Text::TabularDisplay',
            bench_code => sub {
                my ($table) = @_;
                my $t = Text::TabularDisplay->new(@{ $table->[0] });
                $t->add(@{ $table->[$_] }) for 1..@$table-1;
                $t->render; # doesn't add newline
            },
            features => {
                wide_char_data => 1,
                color_data =>  0,
                box_char => {value=>undef, summary=>"Irrelevant"},
                multiline_data => 1,
            },
        },
    ],

    bench_datasets => [
        {name=>'tiny (1x1)'          , argv => [_make_table( 1, 1)],},
        {name=>'small (3x5)'         , argv => [_make_table( 3, 5)],},
        {name=>'wide (30x5)'         , argv => [_make_table(30, 5)],},
        {name=>'long (3x300)'        , argv => [_make_table( 3, 300)],},
        {name=>'large (30x300)'      , argv => [_make_table(30, 300)],},
        {name=>'multiline data (2x1)', argv => [ [["col1", "col2"], ["foobar\nbaz\nqux\nquux","corge"]] ], include_by_default=>0 },
        {name=>'wide char data (1x2)', argv => [ [["col1"], ["no wide character"], ["宽字"]] ], include_by_default=>0 },
        {name=>'color data (1x2)'    , argv => [ [["col1"], ["no color"], ["\e[31m\e[1mwith\e[0m \e[32m\e[1mcolor\e[0m"]] ], include_by_default=>0 },
    ],

};

1;
# ABSTRACT: Modules that generate text tables

__END__

=pod

=encoding UTF-8

=head1 NAME

Acme::CPANModules::TextTable - Modules that generate text tables

=head1 VERSION

This document describes version 0.014 of Acme::CPANModules::TextTable (from Perl distribution Acme-CPANModules-TextTable), released on 2023-02-16.

=head1 SYNOPSIS

To run benchmark with default option:

 % bencher --cpanmodules-module TextTable

To run module startup overhead benchmark:

 % bencher --module-startup --cpanmodules-module TextTable

For more options (dump scenario, list/include/exclude/add participants, list/include/exclude/add datasets, etc), see L<bencher> or run C<bencher --help>.

=head1 DESCRIPTION

Currently excluded from this list are:

=over

=item * L<Text::SimpleTable::AutoWidth> (wrapper to L<Text::SimpleTable>);

=item * L<Text::ASCIITable::EasyTable> (wrapper to L<Text::ASCIITable>);

=back

=head1 ACME::CPANMODULES ENTRIES

=over

=item L<Text::Table::Any>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

This is a frontend for many text table modules as backends. The interface is
dead simple, following L<Text::Table::Tiny>. The main drawback is that it
currently does not allow passing (some, any) options to each backend.


=item L<Text::SimpleTable>

Author: L<MRAMBERG|https://metacpan.org/author/MRAMBERG>

As its name implies, a simple table-generating module with minimal documentation
and a few choices or border characters. You have to set the width of all columns
manually.


=item L<Text::UnicodeBox::Table>

Author: L<EWATERS|https://metacpan.org/author/EWATERS>

The main feature of this module is the various border style it provides drawn
using Unicode box-drawing characters. It allows per-row style. The rendering
speed is particularly slow compared to other modules.


=item L<Text::Table::Manifold>

Author: L<RSAVAGE|https://metacpan.org/author/RSAVAGE>

Two main features of this module is per-column aligning and wide character
support. This module, aside from doing its rendering, can also be told to pass
rendering to HTML, CSV, or other text table module like
L<Text::UnicodeBox::Table>); so in this way it is similar to
L<Text::Table::Any>.


=item L<Text::ANSITable>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

This 2013 project was my take in creating a text table module that can handle
color, multiline text, wide characters. I also threw in various formatting
options, e.g. per-column/row/cell align/valign/pad/vpad, conditional formatting,
and so on. I even added a couple of features I never used: hiding rows and
specifying columns to display which can be in different order from the original
specified columns or can contain the same original columns multiple times. I
think this module offers the most formatting options on CPAN.

In early 2021, I needed colspan/rowspan and I implemented this in a new module:
L<Text::Table::Span> (later renamed to L<Text::Table::More>). I plan to add
this feature too to Text::ANSITable, but in the meantime I'm also adding more
formatting options which I need to Text::Table::More.


=item L<Text::ASCIITable>

Author: L<LUNATIC|https://metacpan.org/author/LUNATIC>

=item L<Text::FormatTable>

Author: L<TREY|https://metacpan.org/author/TREY>

=item L<Text::MarkdownTable>

Author: L<VOJ|https://metacpan.org/author/VOJ>

=item L<Text::Table>

Author: L<SHLOMIF|https://metacpan.org/author/SHLOMIF>

=item L<Text::Table::Tiny>

Author: L<NEILB|https://metacpan.org/author/NEILB>

The simple and tiny table-generating module which I liked back in 2012 (v0.03).
It employs an sprintf() trick to generate a single row. This module started my
personal experiments creating other table-generating modules (at last count I've
created no fewer than 15 of them!).


=item L<Text::Table::TinyBorderStyle>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

=item L<Text::Table::More>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

A module I wrote in early 2021. Main distinguishing feature is support for
rowspan/clospan. I plan to add more features to this module on an as-needed
basic. This module is now preferred to L<Text::ANSITable>, although currently
it does not offer nearly as many formatting options as Text::ANSITable.


=item L<Text::Table::Sprintf>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

A performant (see benchmark result) and lightweight (a page of code, no use of
modules at all), but with minimal extra features.


=item L<Text::Table::TinyColor>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

=item L<Text::Table::TinyColorWide>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

=item L<Text::Table::TinyWide>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

=item L<Text::Table::Org>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

=item L<Text::Table::CSV>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

=item L<Text::Table::HTML>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

=item L<Text::Table::HTML::DataTables>

Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>

=item L<Text::TabularDisplay>

Author: L<DARREN|https://metacpan.org/author/DARREN>

=back

=head1 ACME::CPANMODULES FEATURE COMPARISON MATRIX

 +-------------------------------+----------------+------------------+---------------+--------------+----------------+-----------------+-------------+-------------------+------------------+---------------------+--------------+------------+------------------+--------------------+-----------------+----------------+-------------------+----------+-----------------------+---------------------+-----------------+-----------+
 | module                        | align_cell *1) | align_column *2) | align_row *3) | box_char *4) | color_data *5) | color_theme *6) | colspan *7) | custom_border *8) | custom_color *9) | multiline_data *10) | rowspan *11) | speed *12) | valign_cell *13) | valign_column *14) | valign_row *15) | wide_char_data | column_width *16) | pad *17) | per_column_width *18) | per_row_height *19) | row_height *20) | vpad *21) |
 +-------------------------------+----------------+------------------+---------------+--------------+----------------+-----------------+-------------+-------------------+------------------+---------------------+--------------+------------+------------------+--------------------+-----------------+----------------+-------------------+----------+-----------------------+---------------------+-----------------+-----------+
 | Text::Table::Any              | N/A *22)       | N/A *23)         | N/A *24)      | N/A *25)     | N/A *26)       | N/A *27)        | N/A *28)    | N/A *29)          | N/A *30)         | N/A *31)            | N/A *32)     | N/A *33)   | N/A *34)         | N/A *35)           | N/A *36)        | N/A *37)       | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::SimpleTable             | no             | no               | no            | no           | no             | no              | no          | yes *38)          | no               | no                  | no           | yes *39)   | no               | no                 | no              | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::UnicodeBox::Table       | no             | yes              | N/A           | no           | yes            | no              | no          | yes               | no               | no                  | no           | yes        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::Manifold         | no             | yes              | N/A           | N/A          | yes            | no              | no          | no *40)           | no               | no                  | no           | N/A        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::ANSITable               | yes            | yes              | yes           | yes          | yes            | yes             | no          | yes               | yes              | yes                 | no           | yes        | yes              | yes                | yes             | yes            | yes               | yes      | yes                   | yes                 | yes             | yes       |
 | Text::ASCIITable              | N/A            | N/A              | N/A           | no           | no             | N/A             | N/A         | N/A               | N/A              | yes                 | N/A          | N/A        | N/A              | N/A                | N/A             | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::FormatTable             | N/A            | N/A              | N/A           | no           | no             | N/A             | N/A         | N/A               | N/A              | yes                 | N/A          | N/A        | N/A              | N/A                | N/A             | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::MarkdownTable           | N/A            | N/A              | N/A           | no           | no             | N/A             | N/A         | N/A               | N/A              | no *41)             | N/A          | N/A        | N/A              | N/A                | N/A             | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table                   | N/A            | N/A              | N/A           | N/A *42)     | no             | N/A             | N/A         | N/A               | N/A              | yes                 | N/A          | N/A        | N/A              | N/A                | N/A             | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::Tiny             | N/A            | N/A              | N/A           | yes          | yes            | N/A             | N/A         | N/A               | N/A              | no                  | N/A          | N/A        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::TinyBorderStyle  | N/A            | N/A              | N/A           | yes          | no             | N/A             | N/A         | N/A               | N/A              | no                  | N/A          | N/A        | N/A              | N/A                | N/A             | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::More             | yes            | yes              | yes           | yes          | yes            | no              | yes         | yes               | no               | yes                 | yes          | yes        | yes              | yes                | yes             | yes            | no                | no       | no                    | no                  | no              | no        |
 | Text::Table::Sprintf          | N/A            | N/A              | N/A           | no           | no             | N/A             | N/A         | N/A               | N/A              | no                  | N/A          | yes *43)   | N/A              | N/A                | N/A             | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::TinyColor        | N/A            | N/A              | N/A           | no           | yes            | N/A             | N/A         | N/A               | N/A              | no                  | N/A          | N/A        | N/A              | N/A                | N/A             | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::TinyColorWide    | N/A            | N/A              | N/A           | no           | yes            | N/A             | N/A         | N/A               | N/A              | no                  | N/A          | N/A        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::TinyWide         | N/A            | N/A              | N/A           | no           | no             | N/A             | N/A         | N/A               | N/A              | N/A                 | N/A          | N/A        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::Org              | N/A            | N/A              | N/A           | no           | no             | N/A             | N/A         | N/A               | N/A              | no                  | N/A          | N/A        | N/A              | N/A                | N/A             | no             | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::CSV              | N/A            | N/A              | N/A           | N/A *44)     | no             | N/A             | N/A         | N/A               | N/A              | yes *45)            | N/A          | N/A        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::HTML             | N/A            | N/A              | N/A           | no           | no *46)        | N/A             | N/A         | N/A               | N/A              | yes                 | N/A          | N/A        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::Table::HTML::DataTables | N/A            | N/A              | N/A           | no           | no *47)        | N/A             | N/A         | N/A               | N/A              | yes                 | N/A          | N/A        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::TabularDisplay          | N/A            | N/A              | N/A           | N/A *48)     | no             | N/A             | N/A         | N/A               | N/A              | yes                 | N/A          | N/A        | N/A              | N/A                | N/A             | yes            | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 +-------------------------------+----------------+------------------+---------------+--------------+----------------+-----------------+-------------+-------------------+------------------+---------------------+--------------+------------+------------------+--------------------+-----------------+----------------+-------------------+----------+-----------------------+---------------------+-----------------+-----------+


Notes:

=over

=item 1. align_cell: Whether module supports aligning text horizontally in individual cells (left/right/middle)

=item 2. align_column: Whether module supports aligning text horizontally in a column (left/right/middle)

=item 3. align_row: Whether module supports aligning text horizontally in a row (left/right/middle)

=item 4. box_char: Whether module can utilize box-drawing characters

=item 5. color_data: Whether module supports ANSI colors (i.e. text with ANSI color codes can still be aligned properly)

=item 6. color_theme: Whether the module supports color theme/scheme

=item 7. colspan: Whether module supports column spans

=item 8. custom_border: Whether module allows customizing border in some way

=item 9. custom_color: Whether the module produces colored table and supports customizing color in some way

=item 10. multiline_data: Whether module supports aligning data cells that contain newlines

=item 11. rowspan: Whether module supports row spans

=item 12. speed: Rendering speed

=item 13. valign_cell: Whether module supports aligning text vertically in individual cells (top/bottom/middle)

=item 14. valign_column: Whether module supports aligning text vertically in a column (top/bottom/middle)

=item 15. valign_row: Whether module supports aligning text vertically in a row (top/bottom/middle)

=item 16. column_width: Whether module allows setting the width of columns

=item 17. pad: Whether module allows customizing cell horizontal padding

=item 18. per_column_width: Whether module allows setting column width on a per-column basis

=item 19. per_row_height: Whether module allows setting row height on a per-row basis

=item 20. row_height: Whether module allows setting the height of rows

=item 21. vpad: Whether module allows customizing cell vertical padding

=item 22. Depends on backend

=item 23. Depends on backend

=item 24. Depends on backend

=item 25. Depends on backend

=item 26. Depends on backend

=item 27. Depends on backend

=item 28. Depends on backend

=item 29. Depends on backend

=item 30. Depends on backend

=item 31. Depends on backend

=item 32. Depends on backend

=item 33. Depends on backend

=item 34. Depends on backend

=item 35. Depends on backend

=item 36. Depends on backend

=item 37. Depends on backend

=item 38. Limited choice of 1 ASCII style and 1 UTF style

=item 39. Slightly slower than Text::Table::Tiny

=item 40. But this module can pass rendering to other module like Text::UnicodeBox::Table

=item 41. Newlines stripped

=item 42. Does not draw borders

=item 43. The fastest among the others in this list

=item 44. Irrelevant

=item 45. But make sure your CSV parser can handle multiline cell

=item 46. Not converted to HTML color elements

=item 47. Not converted to HTML color elements

=item 48. Irrelevant

=back

=head1 BENCHMARKED MODULES

Version numbers shown below are the versions used when running the sample benchmark.

L<Text::Table::Any> 0.114

L<Text::SimpleTable> 2.07

L<Text::UnicodeBox::Table>

L<Text::Table::Manifold> 1.03

L<Text::ANSITable> 0.608

L<Text::ASCIITable> 0.22

L<Text::FormatTable> 1.03

L<Text::MarkdownTable> 0.3.1

L<Text::Table> 1.134

L<Text::Table::Tiny> 1.02

L<Text::Table::TinyBorderStyle> 0.005

L<Text::Table::More> 0.025

L<Text::Table::Sprintf> 0.006

L<Text::Table::TinyColor> 0.002

L<Text::Table::TinyColorWide> 0.001

L<Text::Table::TinyWide> 0.001

L<Text::Table::Org> 0.031

L<Text::Table::CSV> 0.023

L<Text::Table::HTML> 0.009

L<Text::Table::HTML::DataTables> 0.012

L<Text::TabularDisplay> 1.38

=head1 BENCHMARK PARTICIPANTS

=over

=item * Text::Table::Any (perl_code)

L<Text::Table::Any>



=item * Text::SimpleTable (perl_code)

L<Text::SimpleTable>



=item * Text::UnicodeBox::Table (perl_code)

L<Text::UnicodeBox::Table>



=item * Text::Table::Manifold (perl_code)

L<Text::Table::Manifold>



=item * Text::ANSITable (perl_code)

L<Text::ANSITable>



=item * Text::ASCIITable (perl_code)

L<Text::ASCIITable>



=item * Text::FormatTable (perl_code)

L<Text::FormatTable>



=item * Text::MarkdownTable (perl_code)

L<Text::MarkdownTable>



=item * Text::Table (perl_code)

L<Text::Table>



=item * Text::Table::Tiny (perl_code)

L<Text::Table::Tiny>



=item * Text::Table::TinyBorderStyle (perl_code)

L<Text::Table::TinyBorderStyle>



=item * Text::Table::More (perl_code)

L<Text::Table::More>



=item * Text::Table::Sprintf (perl_code)

L<Text::Table::Sprintf>



=item * Text::Table::TinyColor (perl_code)

L<Text::Table::TinyColor>



=item * Text::Table::TinyColorWide (perl_code)

L<Text::Table::TinyColorWide>



=item * Text::Table::TinyWide (perl_code)

L<Text::Table::TinyWide>



=item * Text::Table::Org (perl_code)

L<Text::Table::Org>



=item * Text::Table::CSV (perl_code)

L<Text::Table::CSV>



=item * Text::Table::HTML (perl_code)

L<Text::Table::HTML>



=item * Text::Table::HTML::DataTables (perl_code)

L<Text::Table::HTML::DataTables>



=item * Text::TabularDisplay (perl_code)

L<Text::TabularDisplay>



=back

=head1 BENCHMARK DATASETS

=over

=item * tiny (1x1)

=item * small (3x5)

=item * wide (30x5)

=item * long (3x300)

=item * large (30x300)

=item * multiline data (2x1) (not included by default)

=item * wide char data (1x2) (not included by default)

=item * color data (1x2) (not included by default)

=back

=head1 SAMPLE BENCHMARK RESULTS

Run on: perl: I<< v5.34.0 >>, CPU: I<< Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz (2 cores) >>, OS: I<< GNU/Linux Ubuntu version 20.04 >>, OS kernel: I<< Linux version 5.4.0-91-generic >>.

Benchmark with default options (C<< bencher --cpanmodules-module TextTable >>):

 #table1#
 {dataset=>"large (30x300)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |       1   |     990   |                 0.00% |             39075.07% |   0.0093  |      20 |
 | Text::ANSITable               |       2.3 |     440   |               122.45% |             17511.06% |   0.001   |      20 |
 | Text::Table::More             |       2.9 |     350   |               183.78% |             13704.67% |   0.00074 |      20 |
 | Text::ASCIITable              |      12   |      86   |              1044.26% |              3323.61% |   0.00015 |      20 |
 | Text::FormatTable             |      17   |      59   |              1583.12% |              2227.53% |   0.00017 |      21 |
 | Text::Table::TinyColorWide    |      17   |      58   |              1601.03% |              2203.02% |   0.0001  |      20 |
 | Text::Table::TinyWide         |      24   |      41   |              2297.54% |              1533.97% | 7.2e-05   |      20 |
 | Text::SimpleTable             |      32   |      32   |              3016.17% |              1157.16% |   0.00011 |      20 |
 | Text::Table::HTML             |      35   |      29   |              3312.65% |              1047.94% | 6.5e-05   |      20 |
 | Text::Table::Manifold         |      39   |      26   |              3719.11% |               925.76% | 8.6e-05   |      20 |
 | Text::Table::Tiny             |      41   |      24   |              3964.21% |               863.90% | 8.3e-05   |      20 |
 | Text::TabularDisplay          |      47   |      21   |              4546.04% |               743.19% |   0.0002  |      20 |
 | Text::Table::TinyColor        |      62   |      16   |              5986.13% |               543.68% | 4.5e-05   |      20 |
 | Text::MarkdownTable           |      86   |      12   |              8370.09% |               362.51% | 2.4e-05   |      20 |
 | Text::Table                   |     110   |       9.4 |             10414.16% |               272.59% | 3.3e-05   |      20 |
 | Text::Table::HTML::DataTables |     130   |       7.9 |             12381.60% |               213.86% | 2.7e-05   |      20 |
 | Text::Table::TinyBorderStyle  |     220   |       4.5 |             21965.23% |                77.54% | 1.4e-05   |      20 |
 | Text::Table::CSV              |     230   |       4.4 |             22292.34% |                74.95% | 1.7e-05   |      20 |
 | Text::Table::Org              |     230   |       4.3 |             22710.59% |                71.74% | 2.1e-05   |      20 |
 | Text::Table::Sprintf          |     360   |       2.8 |             35801.17% |                 9.12% |   1e-05   |      20 |
 | Text::Table::Any              |     400   |       2.5 |             39075.07% |                 0.00% | 1.3e-05   |      20 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

Formatted as L<Benchmark.pm|Benchmark> result:

                                  Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::ASCIITable  Text::FormatTable  Text::Table::TinyColorWide  Text::Table::TinyWide  Text::SimpleTable  Text::Table::HTML  Text::Table::Manifold  Text::Table::Tiny  Text::TabularDisplay  Text::Table::TinyColor  Text::MarkdownTable  Text::Table  Text::Table::HTML::DataTables  Text::Table::TinyBorderStyle  Text::Table::CSV  Text::Table::Org  Text::Table::Sprintf  Text::Table::Any 
  Text::UnicodeBox::Table          1/s                       --             -55%               -64%              -91%               -94%                        -94%                   -95%               -96%               -97%                   -97%               -97%                  -97%                    -98%                 -98%         -99%                           -99%                          -99%              -99%              -99%                  -99%              -99% 
  Text::ANSITable                2.3/s                     125%               --               -20%              -80%               -86%                        -86%                   -90%               -92%               -93%                   -94%               -94%                  -95%                    -96%                 -97%         -97%                           -98%                          -98%              -99%              -99%                  -99%              -99% 
  Text::Table::More              2.9/s                     182%              25%                 --              -75%               -83%                        -83%                   -88%               -90%               -91%                   -92%               -93%                  -94%                    -95%                 -96%         -97%                           -97%                          -98%              -98%              -98%                  -99%              -99% 
  Text::ASCIITable                12/s                    1051%             411%               306%                --               -31%                        -32%                   -52%               -62%               -66%                   -69%               -72%                  -75%                    -81%                 -86%         -89%                           -90%                          -94%              -94%              -95%                  -96%              -97% 
  Text::FormatTable               17/s                    1577%             645%               493%               45%                 --                         -1%                   -30%               -45%               -50%                   -55%               -59%                  -64%                    -72%                 -79%         -84%                           -86%                          -92%              -92%              -92%                  -95%              -95% 
  Text::Table::TinyColorWide      17/s                    1606%             658%               503%               48%                 1%                          --                   -29%               -44%               -50%                   -55%               -58%                  -63%                    -72%                 -79%         -83%                           -86%                          -92%              -92%              -92%                  -95%              -95% 
  Text::Table::TinyWide           24/s                    2314%             973%               753%              109%                43%                         41%                     --               -21%               -29%                   -36%               -41%                  -48%                    -60%                 -70%         -77%                           -80%                          -89%              -89%              -89%                  -93%              -93% 
  Text::SimpleTable               32/s                    2993%            1275%               993%              168%                84%                         81%                    28%                 --                -9%                   -18%               -25%                  -34%                    -50%                 -62%         -70%                           -75%                          -85%              -86%              -86%                  -91%              -92% 
  Text::Table::HTML               35/s                    3313%            1417%              1106%              196%               103%                        100%                    41%                10%                 --                   -10%               -17%                  -27%                    -44%                 -58%         -67%                           -72%                          -84%              -84%              -85%                  -90%              -91% 
  Text::Table::Manifold           39/s                    3707%            1592%              1246%              230%               126%                        123%                    57%                23%                11%                     --                -7%                  -19%                    -38%                 -53%         -63%                           -69%                          -82%              -83%              -83%                  -89%              -90% 
  Text::Table::Tiny               41/s                    4025%            1733%              1358%              258%               145%                        141%                    70%                33%                20%                     8%                 --                  -12%                    -33%                 -50%         -60%                           -67%                          -81%              -81%              -82%                  -88%              -89% 
  Text::TabularDisplay            47/s                    4614%            1995%              1566%              309%               180%                        176%                    95%                52%                38%                    23%                14%                    --                    -23%                 -42%         -55%                           -62%                          -78%              -79%              -79%                  -86%              -88% 
  Text::Table::TinyColor          62/s                    6087%            2650%              2087%              437%               268%                        262%                   156%               100%                81%                    62%                50%                   31%                      --                 -25%         -41%                           -50%                          -71%              -72%              -73%                  -82%              -84% 
  Text::MarkdownTable             86/s                    8150%            3566%              2816%              616%               391%                        383%                   241%               166%               141%                   116%               100%                   75%                     33%                   --         -21%                           -34%                          -62%              -63%              -64%                  -76%              -79% 
  Text::Table                    110/s                   10431%            4580%              3623%              814%               527%                        517%                   336%               240%               208%                   176%               155%                  123%                     70%                  27%           --                           -15%                          -52%              -53%              -54%                  -70%              -73% 
  Text::Table::HTML::DataTables  130/s                   12431%            5469%              4330%              988%               646%                        634%                   418%               305%               267%                   229%               203%                  165%                    102%                  51%          18%                             --                          -43%              -44%              -45%                  -64%              -68% 
  Text::Table::TinyBorderStyle   220/s                   21900%            9677%              7677%             1811%              1211%                       1188%                   811%               611%               544%                   477%               433%                  366%                    255%                 166%         108%                            75%                            --               -2%               -4%                  -37%              -44% 
  Text::Table::CSV               230/s                   22399%            9899%              7854%             1854%              1240%                       1218%                   831%               627%               559%                   490%               445%                  377%                    263%                 172%         113%                            79%                            2%                --               -2%                  -36%              -43% 
  Text::Table::Org               230/s                   22923%           10132%              8039%             1900%              1272%                       1248%                   853%               644%               574%                   504%               458%                  388%                    272%                 179%         118%                            83%                            4%                2%                --                  -34%              -41% 
  Text::Table::Sprintf           360/s                   35257%           15614%             12400%             2971%              2007%                       1971%                  1364%              1042%               935%                   828%               757%                  650%                    471%                 328%         235%                           182%                           60%               57%               53%                    --              -10% 
  Text::Table::Any               400/s                   39500%           17500%             13900%             3340%              2260%                       2220%                  1539%              1180%              1060%                   940%               860%                  740%                    540%                 380%         276%                           216%                           80%               76%               72%                   11%                -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   Text::SimpleTable: participant=Text::SimpleTable
   Text::Table: participant=Text::Table
   Text::Table::Any: participant=Text::Table::Any
   Text::Table::CSV: participant=Text::Table::CSV
   Text::Table::HTML: participant=Text::Table::HTML
   Text::Table::HTML::DataTables: participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: participant=Text::Table::Manifold
   Text::Table::More: participant=Text::Table::More
   Text::Table::Org: participant=Text::Table::Org
   Text::Table::Sprintf: participant=Text::Table::Sprintf
   Text::Table::Tiny: participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: participant=Text::Table::TinyWide
   Text::TabularDisplay: participant=Text::TabularDisplay
   Text::UnicodeBox::Table: participant=Text::UnicodeBox::Table

=for html <img src="data:image/png;base64, " />


 #table2#
 {dataset=>"long (3x300)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |       7.8 |   130     |                 0.00% |             37283.05% |   0.0012  |      20 |
 | Text::ANSITable               |      20   |    50     |               155.65% |             14522.58% |   0.00018 |      20 |
 | Text::Table::More             |      25   |    40     |               218.34% |             11643.01% | 9.2e-05   |      20 |
 | Text::ASCIITable              |     100   |     8     |              1451.05% |              2310.18% |   0.0001  |      21 |
 | Text::FormatTable             |     160   |     6.3   |              1932.80% |              1738.99% | 1.1e-05   |      20 |
 | Text::Table::TinyColorWide    |     170   |     5.8   |              2113.73% |              1588.69% | 1.7e-05   |      20 |
 | Text::Table::TinyWide         |     250   |     4.1   |              3045.53% |              1088.45% | 1.3e-05   |      20 |
 | Text::SimpleTable             |     310   |     3.3   |              3791.86% |               860.54% | 7.8e-06   |      20 |
 | Text::TabularDisplay          |     340   |     2.9   |              4242.44% |               760.88% | 2.5e-05   |      20 |
 | Text::Table::Manifold         |     350   |     2.8   |              4380.44% |               734.36% | 1.6e-05   |      21 |
 | Text::Table::Tiny             |     380   |     2.6   |              4796.42% |               663.48% | 1.1e-05   |      20 |
 | Text::Table::HTML             |     400   |     2     |              5268.89% |               596.29% | 2.6e-05   |      20 |
 | Text::MarkdownTable           |     430   |     2.3   |              5342.75% |               586.84% | 5.8e-06   |      20 |
 | Text::Table                   |     510   |     2     |              6390.17% |               476.00% | 7.4e-06   |      20 |
 | Text::Table::TinyColor        |     590   |     1.7   |              7481.10% |               393.11% |   5e-06   |      21 |
 | Text::Table::HTML::DataTables |     990   |     1     |             12555.73% |               195.38% | 5.4e-06   |      20 |
 | Text::Table::TinyBorderStyle  |    1400   |     0.73  |             17384.03% |               113.81% | 1.1e-06   |      20 |
 | Text::Table::Org              |    1600   |     0.61  |             20935.91% |                77.71% | 3.8e-06   |      20 |
 | Text::Table::CSV              |    1800   |     0.556 |             22842.23% |                62.94% | 2.1e-07   |      20 |
 | Text::Table::Any              |    2880   |     0.348 |             36587.08% |                 1.90% | 2.1e-07   |      20 |
 | Text::Table::Sprintf          |    2930   |     0.341 |             37283.05% |                 0.00% | 2.7e-07   |      20 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

Formatted as L<Benchmark.pm|Benchmark> result:

                                   Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::ASCIITable  Text::FormatTable  Text::Table::TinyColorWide  Text::Table::TinyWide  Text::SimpleTable  Text::TabularDisplay  Text::Table::Manifold  Text::Table::Tiny  Text::MarkdownTable  Text::Table::HTML  Text::Table  Text::Table::TinyColor  Text::Table::HTML::DataTables  Text::Table::TinyBorderStyle  Text::Table::Org  Text::Table::CSV  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table         7.8/s                       --             -61%               -69%              -93%               -95%                        -95%                   -96%               -97%                  -97%                   -97%               -98%                 -98%               -98%         -98%                    -98%                           -99%                          -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                  20/s                     160%               --               -19%              -84%               -87%                        -88%                   -91%               -93%                  -94%                   -94%               -94%                 -95%               -96%         -96%                    -96%                           -98%                          -98%              -98%              -98%              -99%                  -99% 
  Text::Table::More                25/s                     225%              25%                 --              -80%               -84%                        -85%                   -89%               -91%                  -92%                   -93%               -93%                 -94%               -95%         -95%                    -95%                           -97%                          -98%              -98%              -98%              -99%                  -99% 
  Text::ASCIITable                100/s                    1525%             525%               400%                --               -21%                        -27%                   -48%               -58%                  -63%                   -65%               -67%                 -71%               -75%         -75%                    -78%                           -87%                          -90%              -92%              -93%              -95%                  -95% 
  Text::FormatTable               160/s                    1963%             693%               534%               26%                 --                         -7%                   -34%               -47%                  -53%                   -55%               -58%                 -63%               -68%         -68%                    -73%                           -84%                          -88%              -90%              -91%              -94%                  -94% 
  Text::Table::TinyColorWide      170/s                    2141%             762%               589%               37%                 8%                          --                   -29%               -43%                  -50%                   -51%               -55%                 -60%               -65%         -65%                    -70%                           -82%                          -87%              -89%              -90%              -94%                  -94% 
  Text::Table::TinyWide           250/s                    3070%            1119%               875%               95%                53%                         41%                     --               -19%                  -29%                   -31%               -36%                 -43%               -51%         -51%                    -58%                           -75%                          -82%              -85%              -86%              -91%                  -91% 
  Text::SimpleTable               310/s                    3839%            1415%              1112%              142%                90%                         75%                    24%                 --                  -12%                   -15%               -21%                 -30%               -39%         -39%                    -48%                           -69%                          -77%              -81%              -83%              -89%                  -89% 
  Text::TabularDisplay            340/s                    4382%            1624%              1279%              175%               117%                        100%                    41%                13%                    --                    -3%               -10%                 -20%               -31%         -31%                    -41%                           -65%                          -74%              -78%              -80%              -88%                  -88% 
  Text::Table::Manifold           350/s                    4542%            1685%              1328%              185%               125%                        107%                    46%                17%                    3%                     --                -7%                 -17%               -28%         -28%                    -39%                           -64%                          -73%              -78%              -80%              -87%                  -87% 
  Text::Table::Tiny               380/s                    4900%            1823%              1438%              207%               142%                        123%                    57%                26%                   11%                     7%                 --                 -11%               -23%         -23%                    -34%                           -61%                          -71%              -76%              -78%              -86%                  -86% 
  Text::MarkdownTable             430/s                    5552%            2073%              1639%              247%               173%                        152%                    78%                43%                   26%                    21%                13%                   --               -13%         -13%                    -26%                           -56%                          -68%              -73%              -75%              -84%                  -85% 
  Text::Table::HTML               400/s                    6400%            2400%              1900%              300%               215%                        190%                   104%                64%                   44%                    39%                30%                  14%                 --           0%                    -15%                           -50%                          -63%              -69%              -72%              -82%                  -82% 
  Text::Table                     510/s                    6400%            2400%              1900%              300%               215%                        190%                   104%                64%                   44%                    39%                30%                  14%                 0%           --                    -15%                           -50%                          -63%              -69%              -72%              -82%                  -82% 
  Text::Table::TinyColor          590/s                    7547%            2841%              2252%              370%               270%                        241%                   141%                94%                   70%                    64%                52%                  35%                17%          17%                      --                           -41%                          -57%              -64%              -67%              -79%                  -79% 
  Text::Table::HTML::DataTables   990/s                   12900%            4900%              3900%              700%               530%                        480%                   309%               229%                  190%                   179%               160%                 129%               100%         100%                     70%                             --                          -27%              -39%              -44%              -65%                  -65% 
  Text::Table::TinyBorderStyle   1400/s                   17708%            6749%              5379%              995%               763%                        694%                   461%               352%                  297%                   283%               256%                 215%               173%         173%                    132%                            36%                            --              -16%              -23%              -52%                  -53% 
  Text::Table::Org               1600/s                   21211%            8096%              6457%             1211%               932%                        850%                   572%               440%                  375%                   359%               326%                 277%               227%         227%                    178%                            63%                           19%                --               -8%              -42%                  -44% 
  Text::Table::CSV               1800/s                   23281%            8892%              7094%             1338%              1033%                        943%                   637%               493%                  421%                   403%               367%                 313%               259%         259%                    205%                            79%                           31%                9%                --              -37%                  -38% 
  Text::Table::Any               2880/s                   37256%           14267%             11394%             2198%              1710%                       1566%                  1078%               848%                  733%                   704%               647%                 560%               474%         474%                    388%                           187%                          109%               75%               59%                --                   -2% 
  Text::Table::Sprintf           2930/s                   38023%           14562%             11630%             2246%              1747%                       1600%                  1102%               867%                  750%                   721%               662%                 574%               486%         486%                    398%                           193%                          114%               78%               63%                2%                    -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   Text::SimpleTable: participant=Text::SimpleTable
   Text::Table: participant=Text::Table
   Text::Table::Any: participant=Text::Table::Any
   Text::Table::CSV: participant=Text::Table::CSV
   Text::Table::HTML: participant=Text::Table::HTML
   Text::Table::HTML::DataTables: participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: participant=Text::Table::Manifold
   Text::Table::More: participant=Text::Table::More
   Text::Table::Org: participant=Text::Table::Org
   Text::Table::Sprintf: participant=Text::Table::Sprintf
   Text::Table::Tiny: participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: participant=Text::Table::TinyWide
   Text::TabularDisplay: participant=Text::TabularDisplay
   Text::UnicodeBox::Table: participant=Text::UnicodeBox::Table

=for html <img src="data:image/png;base64, " />


 #table3#
 {dataset=>"small (3x5)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
 | Text::UnicodeBox::Table       |       200 |    5      |                 0.00% |             49318.62% | 6.5e-05 |      20 |
 | Text::ANSITable               |       710 |    1.4    |               273.25% |             13140.15% | 5.4e-06 |      20 |
 | Text::Table::More             |      1000 |    0.99   |               432.26% |              9184.73% | 1.8e-06 |      20 |
 | Text::Table::TinyBorderStyle  |      3900 |    0.26   |              1949.48% |              2311.27% | 6.9e-07 |      20 |
 | Text::ASCIITable              |      4800 |    0.21   |              2417.39% |              1863.09% | 1.3e-06 |      21 |
 | Text::FormatTable             |      6800 |    0.15   |              3516.95% |              1266.30% | 6.9e-07 |      20 |
 | Text::Table                   |      7700 |    0.13   |              3978.23% |              1111.77% | 2.5e-07 |      22 |
 | Text::Table::Manifold         |      7800 |    0.13   |              4013.06% |              1101.50% | 2.1e-07 |      20 |
 | Text::Table::TinyColorWide    |      7900 |    0.13   |              4082.92% |              1081.44% | 2.1e-07 |      20 |
 | Text::Table::TinyWide         |     11000 |    0.089  |              5805.69% |               736.80% | 1.1e-07 |      20 |
 | Text::MarkdownTable           |     12000 |    0.081  |              6428.62% |               656.95% | 8.6e-08 |      31 |
 | Text::SimpleTable             |     13000 |    0.077  |              6777.54% |               618.55% |   1e-07 |      33 |
 | Text::TabularDisplay          |     15000 |    0.066  |              7937.39% |               514.86% | 4.3e-07 |      20 |
 | Text::Table::HTML::DataTables |     15000 |    0.066  |              7962.70% |               512.93% | 9.5e-08 |      25 |
 | Text::Table::Tiny             |     15300 |    0.0653 |              7993.91% |               510.57% | 2.6e-08 |      21 |
 | Text::Table::TinyColor        |     24000 |    0.0417 |             12569.86% |               290.05% | 1.3e-08 |      20 |
 | Text::Table::HTML             |     24800 |    0.0403 |             13012.25% |               276.89% | 1.3e-08 |      20 |
 | Text::Table::Org              |     52600 |    0.019  |             27683.28% |                77.87% | 6.1e-09 |      24 |
 | Text::Table::CSV              |     78900 |    0.0127 |             41573.53% |                18.59% |   5e-09 |      35 |
 | Text::Table::Any              |     80600 |    0.0124 |             42507.83% |                15.98% | 3.3e-09 |      20 |
 | Text::Table::Sprintf          |     93500 |    0.0107 |             49318.62% |                 0.00% |   3e-09 |      24 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+

Formatted as L<Benchmark.pm|Benchmark> result:

                                    Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::Table::TinyBorderStyle  Text::ASCIITable  Text::FormatTable  Text::Table  Text::Table::Manifold  Text::Table::TinyColorWide  Text::Table::TinyWide  Text::MarkdownTable  Text::SimpleTable  Text::TabularDisplay  Text::Table::HTML::DataTables  Text::Table::Tiny  Text::Table::TinyColor  Text::Table::HTML  Text::Table::Org  Text::Table::CSV  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table          200/s                       --             -72%               -80%                          -94%              -95%               -97%         -97%                   -97%                        -97%                   -98%                 -98%               -98%                  -98%                           -98%               -98%                    -99%               -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                  710/s                     257%               --               -29%                          -81%              -85%               -89%         -90%                   -90%                        -90%                   -93%                 -94%               -94%                  -95%                           -95%               -95%                    -97%               -97%              -98%              -99%              -99%                  -99% 
  Text::Table::More               1000/s                     405%              41%                 --                          -73%              -78%               -84%         -86%                   -86%                        -86%                   -91%                 -91%               -92%                  -93%                           -93%               -93%                    -95%               -95%              -98%              -98%              -98%                  -98% 
  Text::Table::TinyBorderStyle    3900/s                    1823%             438%               280%                            --              -19%               -42%         -50%                   -50%                        -50%                   -65%                 -68%               -70%                  -74%                           -74%               -74%                    -83%               -84%              -92%              -95%              -95%                  -95% 
  Text::ASCIITable                4800/s                    2280%             566%               371%                           23%                --               -28%         -38%                   -38%                        -38%                   -57%                 -61%               -63%                  -68%                           -68%               -68%                    -80%               -80%              -90%              -93%              -94%                  -94% 
  Text::FormatTable               6800/s                    3233%             833%               560%                           73%               39%                 --         -13%                   -13%                        -13%                   -40%                 -46%               -48%                  -55%                           -55%               -56%                    -72%               -73%              -87%              -91%              -91%                  -92% 
  Text::Table                     7700/s                    3746%             976%               661%                          100%               61%                15%           --                     0%                          0%                   -31%                 -37%               -40%                  -49%                           -49%               -49%                    -67%               -69%              -85%              -90%              -90%                  -91% 
  Text::Table::Manifold           7800/s                    3746%             976%               661%                          100%               61%                15%           0%                     --                          0%                   -31%                 -37%               -40%                  -49%                           -49%               -49%                    -67%               -69%              -85%              -90%              -90%                  -91% 
  Text::Table::TinyColorWide      7900/s                    3746%             976%               661%                          100%               61%                15%           0%                     0%                          --                   -31%                 -37%               -40%                  -49%                           -49%               -49%                    -67%               -69%              -85%              -90%              -90%                  -91% 
  Text::Table::TinyWide          11000/s                    5517%            1473%              1012%                          192%              135%                68%          46%                    46%                         46%                     --                  -8%               -13%                  -25%                           -25%               -26%                    -53%               -54%              -78%              -85%              -86%                  -87% 
  Text::MarkdownTable            12000/s                    6072%            1628%              1122%                          220%              159%                85%          60%                    60%                         60%                     9%                   --                -4%                  -18%                           -18%               -19%                    -48%               -50%              -76%              -84%              -84%                  -86% 
  Text::SimpleTable              13000/s                    6393%            1718%              1185%                          237%              172%                94%          68%                    68%                         68%                    15%                   5%                 --                  -14%                           -14%               -15%                    -45%               -47%              -75%              -83%              -83%                  -86% 
  Text::TabularDisplay           15000/s                    7475%            2021%              1400%                          293%              218%               127%          96%                    96%                         96%                    34%                  22%                16%                    --                             0%                -1%                    -36%               -38%              -71%              -80%              -81%                  -83% 
  Text::Table::HTML::DataTables  15000/s                    7475%            2021%              1400%                          293%              218%               127%          96%                    96%                         96%                    34%                  22%                16%                    0%                             --                -1%                    -36%               -38%              -71%              -80%              -81%                  -83% 
  Text::Table::Tiny              15300/s                    7556%            2043%              1416%                          298%              221%               129%          99%                    99%                         99%                    36%                  24%                17%                    1%                             1%                 --                    -36%               -38%              -70%              -80%              -81%                  -83% 
  Text::Table::TinyColor         24000/s                   11890%            3257%              2274%                          523%              403%               259%         211%                   211%                        211%                   113%                  94%                84%                   58%                            58%                56%                      --                -3%              -54%              -69%              -70%                  -74% 
  Text::Table::HTML              24800/s                   12306%            3373%              2356%                          545%              421%               272%         222%                   222%                        222%                   120%                 100%                91%                   63%                            63%                62%                      3%                 --              -52%              -68%              -69%                  -73% 
  Text::Table::Org               52600/s                   26215%            7268%              5110%                         1268%             1005%               689%         584%                   584%                        584%                   368%                 326%               305%                  247%                           247%               243%                    119%               112%                --              -33%              -34%                  -43% 
  Text::Table::CSV               78900/s                   39270%           10923%              7695%                         1947%             1553%              1081%         923%                   923%                        923%                   600%                 537%               506%                  419%                           419%               414%                    228%               217%               49%                --               -2%                  -15% 
  Text::Table::Any               80600/s                   40222%           11190%              7883%                         1996%             1593%              1109%         948%                   948%                        948%                   617%                 553%               520%                  432%                           432%               426%                    236%               225%               53%                2%                --                  -13% 
  Text::Table::Sprintf           93500/s                   46628%           12984%              9152%                         2329%             1862%              1301%        1114%                  1114%                       1114%                   731%                 657%               619%                  516%                           516%               510%                    289%               276%               77%               18%               15%                    -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   Text::SimpleTable: participant=Text::SimpleTable
   Text::Table: participant=Text::Table
   Text::Table::Any: participant=Text::Table::Any
   Text::Table::CSV: participant=Text::Table::CSV
   Text::Table::HTML: participant=Text::Table::HTML
   Text::Table::HTML::DataTables: participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: participant=Text::Table::Manifold
   Text::Table::More: participant=Text::Table::More
   Text::Table::Org: participant=Text::Table::Org
   Text::Table::Sprintf: participant=Text::Table::Sprintf
   Text::Table::Tiny: participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: participant=Text::Table::TinyWide
   Text::TabularDisplay: participant=Text::TabularDisplay
   Text::UnicodeBox::Table: participant=Text::UnicodeBox::Table

=for html <img src="data:image/png;base64, " />


 #table4#
 {dataset=>"tiny (1x1)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+
 | Text::UnicodeBox::Table       |     400   | 3         |                 0.00% |             75061.76% | 7.2e-05 |      20 |
 | Text::ANSITable               |    2300   | 0.44      |               481.41% |             12827.45% | 1.3e-06 |      20 |
 | Text::Table::More             |    3000   | 0.33      |               673.26% |              9620.14% | 2.2e-06 |      20 |
 | Text::Table::TinyBorderStyle  |    4800   | 0.21      |              1127.95% |              6020.92% | 6.9e-07 |      20 |
 | Text::Table::Manifold         |   14000   | 0.073     |              3390.75% |              2053.17% | 1.1e-07 |      20 |
 | Text::ASCIITable              |   17000   | 0.06      |              4189.96% |              1652.04% | 3.5e-07 |      20 |
 | Text::Table                   |   20000   | 0.05      |              4719.47% |              1459.55% | 6.7e-07 |      20 |
 | Text::Table::HTML::DataTables |   21000   | 0.048     |              5262.00% |              1301.75% | 9.7e-08 |      24 |
 | Text::MarkdownTable           |   25000   | 0.04      |              6258.17% |              1082.13% | 1.1e-07 |      20 |
 | Text::FormatTable             |   34000   | 0.029     |              8611.91% |               762.75% | 1.1e-07 |      22 |
 | Text::Table::TinyColorWide    |   46000   | 0.022     |             11750.19% |               534.27% |   3e-08 |      24 |
 | Text::Table::Tiny             |   54000   | 0.018     |             13862.61% |               438.31% | 2.6e-08 |      21 |
 | Text::Table::TinyWide         |   60000   | 0.017     |             15386.79% |               385.33% |   2e-08 |      20 |
 | Text::TabularDisplay          |   62468.1 | 0.0160082 |             15911.46% |               369.42% |   0     |      20 |
 | Text::SimpleTable             |   64700   | 0.0155    |             16471.25% |               353.57% | 6.7e-09 |      20 |
 | Text::Table::TinyColor        |   91000   | 0.011     |             23131.41% |               223.54% | 1.3e-08 |      22 |
 | Text::Table::HTML             |  120000   | 0.0082    |             31181.42% |               140.28% |   1e-08 |      20 |
 | Text::Table::Org              |  142000   | 0.00703   |             36356.69% |               106.17% | 2.9e-09 |      26 |
 | Text::Table::Any              |  180000   | 0.0054    |             47266.53% |                58.68% | 6.5e-09 |      21 |
 | Text::Table::Sprintf          |  270000   | 0.0037    |             68997.45% |                 8.78% | 1.3e-08 |      20 |
 | Text::Table::CSV              |  293000   | 0.00341   |             75061.76% |                 0.00% | 1.4e-09 |      29 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+

Formatted as L<Benchmark.pm|Benchmark> result:

                                      Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::Table::TinyBorderStyle  Text::Table::Manifold  Text::ASCIITable  Text::Table  Text::Table::HTML::DataTables  Text::MarkdownTable  Text::FormatTable  Text::Table::TinyColorWide  Text::Table::Tiny  Text::Table::TinyWide  Text::TabularDisplay  Text::SimpleTable  Text::Table::TinyColor  Text::Table::HTML  Text::Table::Org  Text::Table::Any  Text::Table::Sprintf  Text::Table::CSV 
  Text::UnicodeBox::Table            400/s                       --             -85%               -89%                          -93%                   -97%              -98%         -98%                           -98%                 -98%               -99%                        -99%               -99%                   -99%                  -99%               -99%                    -99%               -99%              -99%              -99%                  -99%              -99% 
  Text::ANSITable                   2300/s                     581%               --               -25%                          -52%                   -83%              -86%         -88%                           -89%                 -90%               -93%                        -95%               -95%                   -96%                  -96%               -96%                    -97%               -98%              -98%              -98%                  -99%              -99% 
  Text::Table::More                 3000/s                     809%              33%                 --                          -36%                   -77%              -81%         -84%                           -85%                 -87%               -91%                        -93%               -94%                   -94%                  -95%               -95%                    -96%               -97%              -97%              -98%                  -98%              -98% 
  Text::Table::TinyBorderStyle      4800/s                    1328%             109%                57%                            --                   -65%              -71%         -76%                           -77%                 -80%               -86%                        -89%               -91%                   -91%                  -92%               -92%                    -94%               -96%              -96%              -97%                  -98%              -98% 
  Text::Table::Manifold            14000/s                    4009%             502%               352%                          187%                     --              -17%         -31%                           -34%                 -45%               -60%                        -69%               -75%                   -76%                  -78%               -78%                    -84%               -88%              -90%              -92%                  -94%              -95% 
  Text::ASCIITable                 17000/s                    4900%             633%               450%                          250%                    21%                --         -16%                           -19%                 -33%               -51%                        -63%               -70%                   -71%                  -73%               -74%                    -81%               -86%              -88%              -91%                  -93%              -94% 
  Text::Table                      20000/s                    5900%             779%               560%                          319%                    45%               19%           --                            -4%                 -20%               -42%                        -56%               -64%                   -65%                  -67%               -69%                    -78%               -83%              -85%              -89%                  -92%              -93% 
  Text::Table::HTML::DataTables    21000/s                    6150%             816%               587%                          337%                    52%               25%           4%                             --                 -16%               -39%                        -54%               -62%                   -64%                  -66%               -67%                    -77%               -82%              -85%              -88%                  -92%              -92% 
  Text::MarkdownTable              25000/s                    7400%            1000%               725%                          425%                    82%               50%          25%                            19%                   --               -27%                        -45%               -55%                   -57%                  -59%               -61%                    -72%               -79%              -82%              -86%                  -90%              -91% 
  Text::FormatTable                34000/s                   10244%            1417%              1037%                          624%                   151%              106%          72%                            65%                  37%                 --                        -24%               -37%                   -41%                  -44%               -46%                    -62%               -71%              -75%              -81%                  -87%              -88% 
  Text::Table::TinyColorWide       46000/s                   13536%            1900%              1400%                          854%                   231%              172%         127%                           118%                  81%                31%                          --               -18%                   -22%                  -27%               -29%                    -50%               -62%              -68%              -75%                  -83%              -84% 
  Text::Table::Tiny                54000/s                   16566%            2344%              1733%                         1066%                   305%              233%         177%                           166%                 122%                61%                         22%                 --                    -5%                  -11%               -13%                    -38%               -54%              -60%              -70%                  -79%              -81% 
  Text::Table::TinyWide            60000/s                   17547%            2488%              1841%                         1135%                   329%              252%         194%                           182%                 135%                70%                         29%                 5%                     --                   -5%                -8%                    -35%               -51%              -58%              -68%                  -78%              -79% 
  Text::TabularDisplay           62468.1/s                   18640%            2648%              1961%                         1211%                   356%              274%         212%                           199%                 149%                81%                         37%                12%                     6%                    --                -3%                    -31%               -48%              -56%              -66%                  -76%              -78% 
  Text::SimpleTable                64700/s                   19254%            2738%              2029%                         1254%                   370%              287%         222%                           209%                 158%                87%                         41%                16%                     9%                    3%                 --                    -29%               -47%              -54%              -65%                  -76%              -78% 
  Text::Table::TinyColor           91000/s                   27172%            3900%              2900%                         1809%                   563%              445%         354%                           336%                 263%               163%                        100%                63%                    54%                   45%                40%                      --               -25%              -36%              -50%                  -66%              -69% 
  Text::Table::HTML               120000/s                   36485%            5265%              3924%                         2460%                   790%              631%         509%                           485%                 387%               253%                        168%               119%                   107%                   95%                89%                     34%                 --              -14%              -34%                  -54%              -58% 
  Text::Table::Org                142000/s                   42574%            6158%              4594%                         2887%                   938%              753%         611%                           582%                 468%               312%                        212%               156%                   141%                  127%               120%                     56%                16%                --              -23%                  -47%              -51% 
  Text::Table::Any                180000/s                   55455%            8048%              6011%                         3788%                  1251%             1011%         825%                           788%                 640%               437%                        307%               233%                   214%                  196%               187%                    103%                51%               30%                --                  -31%              -36% 
  Text::Table::Sprintf            270000/s                   80981%           11791%              8818%                         5575%                  1872%             1521%        1251%                          1197%                 981%               683%                        494%               386%                   359%                  332%               318%                    197%               121%               89%               45%                    --               -7% 
  Text::Table::CSV                293000/s                   87876%           12803%              9577%                         6058%                  2040%             1659%        1366%                          1307%                1073%               750%                        545%               427%                   398%                  369%               354%                    222%               140%              106%               58%                    8%                -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   Text::SimpleTable: participant=Text::SimpleTable
   Text::Table: participant=Text::Table
   Text::Table::Any: participant=Text::Table::Any
   Text::Table::CSV: participant=Text::Table::CSV
   Text::Table::HTML: participant=Text::Table::HTML
   Text::Table::HTML::DataTables: participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: participant=Text::Table::Manifold
   Text::Table::More: participant=Text::Table::More
   Text::Table::Org: participant=Text::Table::Org
   Text::Table::Sprintf: participant=Text::Table::Sprintf
   Text::Table::Tiny: participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: participant=Text::Table::TinyWide
   Text::TabularDisplay: participant=Text::TabularDisplay
   Text::UnicodeBox::Table: participant=Text::UnicodeBox::Table

=for html <img src="data:image/png;base64, " />


 #table5#
 {dataset=>"wide (30x5)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |        40 |   25      |                 0.00% |             38035.84% |   0.00013 |      21 |
 | Text::ANSITable               |        94 |   11      |               137.04% |             15988.38% | 4.2e-05   |      20 |
 | Text::Table::More             |       130 |    7.5    |               236.11% |             11246.27% | 3.4e-05   |      20 |
 | Text::ASCIITable              |       520 |    1.9    |              1211.61% |              2807.55% | 3.5e-06   |      20 |
 | Text::FormatTable             |       720 |    1.4    |              1700.78% |              2017.74% | 1.8e-06   |      21 |
 | Text::Table::TinyColorWide    |       880 |    1.1    |              2117.40% |              1619.84% |   3e-06   |      20 |
 | Text::Table                   |      1200 |    0.85   |              2868.25% |              1184.79% | 9.1e-07   |      20 |
 | Text::Table::TinyWide         |      1200 |    0.82   |              2979.82% |              1138.25% | 2.1e-06   |      20 |
 | Text::Table::TinyBorderStyle  |      1240 |    0.807  |              3010.24% |              1126.14% | 6.4e-07   |      20 |
 | Text::SimpleTable             |      1600 |    0.61   |              4019.62% |               825.71% | 8.8e-07   |      21 |
 | Text::Table::Manifold         |      1700 |    0.6    |              4093.25% |               809.46% | 8.5e-07   |      20 |
 | Text::Table::Tiny             |      2020 |    0.495  |              4977.95% |               651.01% | 4.8e-07   |      20 |
 | Text::TabularDisplay          |      2300 |    0.43   |              5776.56% |               548.95% | 1.4e-06   |      20 |
 | Text::Table::HTML             |      3000 |    0.33   |              7451.94% |               404.98% | 6.4e-07   |      20 |
 | Text::Table::TinyColor        |      3050 |    0.328  |              7559.95% |               397.86% | 1.9e-07   |      24 |
 | Text::MarkdownTable           |      3500 |    0.29   |              8665.15% |               335.08% | 4.3e-07   |      20 |
 | Text::Table::HTML::DataTables |      4800 |    0.21   |             11976.18% |               215.79% | 1.3e-06   |      20 |
 | Text::Table::Org              |      8600 |    0.12   |             21438.87% |                77.06% | 2.7e-07   |      20 |
 | Text::Table::CSV              |     12000 |    0.085  |             29353.92% |                29.48% | 2.1e-07   |      20 |
 | Text::Table::Any              |     14500 |    0.0688 |             36414.52% |                 4.44% | 2.7e-08   |      20 |
 | Text::Table::Sprintf          |     15200 |    0.0659 |             38035.84% |                 0.00% | 2.5e-08   |      22 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

Formatted as L<Benchmark.pm|Benchmark> result:

                                    Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::ASCIITable  Text::FormatTable  Text::Table::TinyColorWide  Text::Table  Text::Table::TinyWide  Text::Table::TinyBorderStyle  Text::SimpleTable  Text::Table::Manifold  Text::Table::Tiny  Text::TabularDisplay  Text::Table::HTML  Text::Table::TinyColor  Text::MarkdownTable  Text::Table::HTML::DataTables  Text::Table::Org  Text::Table::CSV  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table           40/s                       --             -56%               -70%              -92%               -94%                        -95%         -96%                   -96%                          -96%               -97%                   -97%               -98%                  -98%               -98%                    -98%                 -98%                           -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                   94/s                     127%               --               -31%              -82%               -87%                        -90%         -92%                   -92%                          -92%               -94%                   -94%               -95%                  -96%               -97%                    -97%                 -97%                           -98%              -98%              -99%              -99%                  -99% 
  Text::Table::More                130/s                     233%              46%                 --              -74%               -81%                        -85%         -88%                   -89%                          -89%               -91%                   -92%               -93%                  -94%               -95%                    -95%                 -96%                           -97%              -98%              -98%              -99%                  -99% 
  Text::ASCIITable                 520/s                    1215%             478%               294%                --               -26%                        -42%         -55%                   -56%                          -57%               -67%                   -68%               -73%                  -77%               -82%                    -82%                 -84%                           -88%              -93%              -95%              -96%                  -96% 
  Text::FormatTable                720/s                    1685%             685%               435%               35%                 --                        -21%         -39%                   -41%                          -42%               -56%                   -57%               -64%                  -69%               -76%                    -76%                 -79%                           -85%              -91%              -93%              -95%                  -95% 
  Text::Table::TinyColorWide       880/s                    2172%             900%               581%               72%                27%                          --         -22%                   -25%                          -26%               -44%                   -45%               -55%                  -60%               -70%                    -70%                 -73%                           -80%              -89%              -92%              -93%                  -94% 
  Text::Table                     1200/s                    2841%            1194%               782%              123%                64%                         29%           --                    -3%                           -5%               -28%                   -29%               -41%                  -49%               -61%                    -61%                 -65%                           -75%              -85%              -90%              -91%                  -92% 
  Text::Table::TinyWide           1200/s                    2948%            1241%               814%              131%                70%                         34%           3%                     --                           -1%               -25%                   -26%               -39%                  -47%               -59%                    -60%                 -64%                           -74%              -85%              -89%              -91%                  -91% 
  Text::Table::TinyBorderStyle    1240/s                    2997%            1263%               829%              135%                73%                         36%           5%                     1%                            --               -24%                   -25%               -38%                  -46%               -59%                    -59%                 -64%                           -73%              -85%              -89%              -91%                  -91% 
  Text::SimpleTable               1600/s                    3998%            1703%              1129%              211%               129%                         80%          39%                    34%                           32%                 --                    -1%               -18%                  -29%               -45%                    -46%                 -52%                           -65%              -80%              -86%              -88%                  -89% 
  Text::Table::Manifold           1700/s                    4066%            1733%              1150%              216%               133%                         83%          41%                    36%                           34%                 1%                     --               -17%                  -28%               -44%                    -45%                 -51%                           -65%              -80%              -85%              -88%                  -89% 
  Text::Table::Tiny               2020/s                    4950%            2122%              1415%              283%               182%                        122%          71%                    65%                           63%                23%                    21%                 --                  -13%               -33%                    -33%                 -41%                           -57%              -75%              -82%              -86%                  -86% 
  Text::TabularDisplay            2300/s                    5713%            2458%              1644%              341%               225%                        155%          97%                    90%                           87%                41%                    39%                15%                    --               -23%                    -23%                 -32%                           -51%              -72%              -80%              -84%                  -84% 
  Text::Table::HTML               3000/s                    7475%            3233%              2172%              475%               324%                        233%         157%                   148%                          144%                84%                    81%                50%                   30%                 --                      0%                 -12%                           -36%              -63%              -74%              -79%                  -80% 
  Text::Table::TinyColor          3050/s                    7521%            3253%              2186%              479%               326%                        235%         159%                   149%                          146%                85%                    82%                50%                   31%                 0%                      --                 -11%                           -35%              -63%              -74%              -79%                  -79% 
  Text::MarkdownTable             3500/s                    8520%            3693%              2486%              555%               382%                        279%         193%                   182%                          178%               110%                   106%                70%                   48%                13%                     13%                   --                           -27%              -58%              -70%              -76%                  -77% 
  Text::Table::HTML::DataTables   4800/s                   11804%            5138%              3471%              804%               566%                        423%         304%                   290%                          284%               190%                   185%               135%                  104%                57%                     56%                  38%                             --              -42%              -59%              -67%                  -68% 
  Text::Table::Org                8600/s                   20733%            9066%              6150%             1483%              1066%                        816%         608%                   583%                          572%               408%                   400%               312%                  258%               175%                    173%                 141%                            75%                --              -29%              -42%                  -45% 
  Text::Table::CSV               12000/s                   29311%           12841%              8723%             2135%              1547%                       1194%         899%                   864%                          849%               617%                   605%               482%                  405%               288%                    285%                 241%                           147%               41%                --              -19%                  -22% 
  Text::Table::Any               14500/s                   36237%           15888%             10801%             2661%              1934%                       1498%        1135%                  1091%                         1072%               786%                   772%               619%                  525%               379%                    376%                 321%                           205%               74%               23%                --                   -4% 
  Text::Table::Sprintf           15200/s                   37836%           16591%             11280%             2783%              2024%                       1569%        1189%                  1144%                         1124%               825%                   810%               651%                  552%               400%                    397%                 340%                           218%               82%               28%                4%                    -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   Text::SimpleTable: participant=Text::SimpleTable
   Text::Table: participant=Text::Table
   Text::Table::Any: participant=Text::Table::Any
   Text::Table::CSV: participant=Text::Table::CSV
   Text::Table::HTML: participant=Text::Table::HTML
   Text::Table::HTML::DataTables: participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: participant=Text::Table::Manifold
   Text::Table::More: participant=Text::Table::More
   Text::Table::Org: participant=Text::Table::Org
   Text::Table::Sprintf: participant=Text::Table::Sprintf
   Text::Table::Tiny: participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: participant=Text::Table::TinyWide
   Text::TabularDisplay: participant=Text::TabularDisplay
   Text::UnicodeBox::Table: participant=Text::UnicodeBox::Table

=for html <img src="data:image/png;base64, " />


Benchmark module startup overhead (C<< bencher --cpanmodules-module TextTable --module-startup >>):

 #table6#
 +-------------------------------+-----------+---------------------+-----------------------+-----------------------+-----------+---------+
 | participant                   | time (ms) | mod_overhead_time   | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+---------------------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |     170   | 161.4               |                 0.00% |              1830.18% |   0.00027 |      20 |
 | Text::Table::Manifold         |      92   |  83.4               |                81.30% |               964.64% |   0.00016 |      20 |
 | Text::ANSITable               |      47   |  38.4               |               257.06% |               440.57% | 5.5e-05   |      20 |
 | Text::MarkdownTable           |      42   |  33.4               |               294.86% |               388.83% | 5.6e-05   |      20 |
 | Text::Table::TinyColorWide    |      35   |  26.4               |               380.00% |               302.12% | 6.6e-05   |      20 |
 | Text::Table::TinyWide         |      32.1 |  23.5               |               419.12% |               271.82% | 2.7e-05   |      20 |
 | Text::Table::More             |      25   |  16.4               |               559.15% |               192.83% | 7.8e-05   |      20 |
 | Text::Table                   |      24   |  15.4               |               601.85% |               175.01% |   0.00011 |      20 |
 | Text::ASCIITable              |      19   |  10.4               |               777.55% |               119.95% | 9.1e-05   |      20 |
 | Text::Table::Tiny             |      19   |  10.4               |               787.87% |               117.39% |   0.00011 |      20 |
 | Text::FormatTable             |      16   |   7.4               |               960.14% |                82.07% | 3.8e-05   |      20 |
 | Text::Table::TinyColor        |      15   |   6.4               |               998.71% |                75.68% | 6.9e-05   |      20 |
 | Text::Table::TinyBorderStyle  |      13   |   4.4               |              1185.52% |                50.15% |   0.00011 |      20 |
 | Text::Table::Any              |      12.5 |   3.9               |              1234.89% |                44.60% | 1.1e-05   |      20 |
 | Text::SimpleTable             |      12   |   3.4               |              1314.31% |                36.48% | 5.5e-05   |      20 |
 | Text::TabularDisplay          |      12   |   3.4               |              1320.89% |                35.84% | 5.7e-05   |      20 |
 | Text::Table::HTML::DataTables |      11   |   2.4               |              1410.81% |                27.76% | 2.6e-05   |      20 |
 | Text::Table::HTML             |      11   |   2.4               |              1417.70% |                27.18% | 4.1e-05   |      22 |
 | Text::Table::Org              |      11   |   2.4               |              1433.01% |                25.91% | 2.3e-05   |      20 |
 | Text::Table::CSV              |       8.9 |   0.300000000000001 |              1759.70% |                 3.79% | 1.6e-05   |      20 |
 | Text::Table::Sprintf          |       8.8 |   0.200000000000001 |              1789.17% |                 2.17% | 1.8e-05   |      20 |
 | perl -e1 (baseline)           |       8.6 |   0                 |              1830.18% |                 0.00% |   5e-05   |      20 |
 +-------------------------------+-----------+---------------------+-----------------------+-----------------------+-----------+---------+


Formatted as L<Benchmark.pm|Benchmark> result:

                                    Rate  Text::UnicodeBox::Table  Text::Table::Manifold  Text::ANSITable  Text::MarkdownTable  Text::Table::TinyColorWide  Text::Table::TinyWide  Text::Table::More  Text::Table  Text::ASCIITable  Text::Table::Tiny  Text::FormatTable  Text::Table::TinyColor  Text::Table::TinyBorderStyle  Text::Table::Any  Text::SimpleTable  Text::TabularDisplay  Text::Table::HTML::DataTables  Text::Table::HTML  Text::Table::Org  Text::Table::CSV  Text::Table::Sprintf  perl -e1 (baseline) 
  Text::UnicodeBox::Table          5.9/s                       --                   -45%             -72%                 -75%                        -79%                   -81%               -85%         -85%              -88%               -88%               -90%                    -91%                          -92%              -92%               -92%                  -92%                           -93%               -93%              -93%              -94%                  -94%                 -94% 
  Text::Table::Manifold           10.9/s                      84%                     --             -48%                 -54%                        -61%                   -65%               -72%         -73%              -79%               -79%               -82%                    -83%                          -85%              -86%               -86%                  -86%                           -88%               -88%              -88%              -90%                  -90%                 -90% 
  Text::ANSITable                 21.3/s                     261%                    95%               --                 -10%                        -25%                   -31%               -46%         -48%              -59%               -59%               -65%                    -68%                          -72%              -73%               -74%                  -74%                           -76%               -76%              -76%              -81%                  -81%                 -81% 
  Text::MarkdownTable             23.8/s                     304%                   119%              11%                   --                        -16%                   -23%               -40%         -42%              -54%               -54%               -61%                    -64%                          -69%              -70%               -71%                  -71%                           -73%               -73%              -73%              -78%                  -79%                 -79% 
  Text::Table::TinyColorWide      28.6/s                     385%                   162%              34%                  19%                          --                    -8%               -28%         -31%              -45%               -45%               -54%                    -57%                          -62%              -64%               -65%                  -65%                           -68%               -68%              -68%              -74%                  -74%                 -75% 
  Text::Table::TinyWide           31.2/s                     429%                   186%              46%                  30%                          9%                     --               -22%         -25%              -40%               -40%               -50%                    -53%                          -59%              -61%               -62%                  -62%                           -65%               -65%              -65%              -72%                  -72%                 -73% 
  Text::Table::More               40.0/s                     580%                   268%              87%                  68%                         39%                    28%                 --          -4%              -24%               -24%               -36%                    -40%                          -48%              -50%               -52%                  -52%                           -56%               -56%              -56%              -64%                  -64%                 -65% 
  Text::Table                     41.7/s                     608%                   283%              95%                  75%                         45%                    33%                 4%           --              -20%               -20%               -33%                    -37%                          -45%              -47%               -50%                  -50%                           -54%               -54%              -54%              -62%                  -63%                 -64% 
  Text::ASCIITable                52.6/s                     794%                   384%             147%                 121%                         84%                    68%                31%          26%                --                 0%               -15%                    -21%                          -31%              -34%               -36%                  -36%                           -42%               -42%              -42%              -53%                  -53%                 -54% 
  Text::Table::Tiny               52.6/s                     794%                   384%             147%                 121%                         84%                    68%                31%          26%                0%                 --               -15%                    -21%                          -31%              -34%               -36%                  -36%                           -42%               -42%              -42%              -53%                  -53%                 -54% 
  Text::FormatTable               62.5/s                     962%                   475%             193%                 162%                        118%                   100%                56%          50%               18%                18%                 --                     -6%                          -18%              -21%               -25%                  -25%                           -31%               -31%              -31%              -44%                  -44%                 -46% 
  Text::Table::TinyColor          66.7/s                    1033%                   513%             213%                 179%                        133%                   114%                66%          60%               26%                26%                 6%                      --                          -13%              -16%               -19%                  -19%                           -26%               -26%              -26%              -40%                  -41%                 -42% 
  Text::Table::TinyBorderStyle    76.9/s                    1207%                   607%             261%                 223%                        169%                   146%                92%          84%               46%                46%                23%                     15%                            --               -3%                -7%                   -7%                           -15%               -15%              -15%              -31%                  -32%                 -33% 
  Text::Table::Any                80.0/s                    1260%                   636%             276%                 236%                        179%                   156%               100%          92%               52%                52%                28%                     19%                            4%                --                -4%                   -4%                           -12%               -12%              -12%              -28%                  -29%                 -31% 
  Text::SimpleTable               83.3/s                    1316%                   666%             291%                 250%                        191%                   167%               108%         100%               58%                58%                33%                     25%                            8%                4%                 --                    0%                            -8%                -8%               -8%              -25%                  -26%                 -28% 
  Text::TabularDisplay            83.3/s                    1316%                   666%             291%                 250%                        191%                   167%               108%         100%               58%                58%                33%                     25%                            8%                4%                 0%                    --                            -8%                -8%               -8%              -25%                  -26%                 -28% 
  Text::Table::HTML::DataTables   90.9/s                    1445%                   736%             327%                 281%                        218%                   191%               127%         118%               72%                72%                45%                     36%                           18%               13%                 9%                    9%                             --                 0%                0%              -19%                  -19%                 -21% 
  Text::Table::HTML               90.9/s                    1445%                   736%             327%                 281%                        218%                   191%               127%         118%               72%                72%                45%                     36%                           18%               13%                 9%                    9%                             0%                 --                0%              -19%                  -19%                 -21% 
  Text::Table::Org                90.9/s                    1445%                   736%             327%                 281%                        218%                   191%               127%         118%               72%                72%                45%                     36%                           18%               13%                 9%                    9%                             0%                 0%                --              -19%                  -19%                 -21% 
  Text::Table::CSV               112.4/s                    1810%                   933%             428%                 371%                        293%                   260%               180%         169%              113%               113%                79%                     68%                           46%               40%                34%                   34%                            23%                23%               23%                --                   -1%                  -3% 
  Text::Table::Sprintf           113.6/s                    1831%                   945%             434%                 377%                        297%                   264%               184%         172%              115%               115%                81%                     70%                           47%               42%                36%                   36%                            25%                25%               25%                1%                    --                  -2% 
  perl -e1 (baseline)            116.3/s                    1876%                   969%             446%                 388%                        306%                   273%               190%         179%              120%               120%                86%                     74%                           51%               45%                39%                   39%                            27%                27%               27%                3%                    2%                   -- 
 
 Legends:
   Text::ANSITable: mod_overhead_time=38.4 participant=Text::ANSITable
   Text::ASCIITable: mod_overhead_time=10.4 participant=Text::ASCIITable
   Text::FormatTable: mod_overhead_time=7.4 participant=Text::FormatTable
   Text::MarkdownTable: mod_overhead_time=33.4 participant=Text::MarkdownTable
   Text::SimpleTable: mod_overhead_time=3.4 participant=Text::SimpleTable
   Text::Table: mod_overhead_time=15.4 participant=Text::Table
   Text::Table::Any: mod_overhead_time=3.9 participant=Text::Table::Any
   Text::Table::CSV: mod_overhead_time=0.300000000000001 participant=Text::Table::CSV
   Text::Table::HTML: mod_overhead_time=2.4 participant=Text::Table::HTML
   Text::Table::HTML::DataTables: mod_overhead_time=2.4 participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: mod_overhead_time=83.4 participant=Text::Table::Manifold
   Text::Table::More: mod_overhead_time=16.4 participant=Text::Table::More
   Text::Table::Org: mod_overhead_time=2.4 participant=Text::Table::Org
   Text::Table::Sprintf: mod_overhead_time=0.200000000000001 participant=Text::Table::Sprintf
   Text::Table::Tiny: mod_overhead_time=10.4 participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: mod_overhead_time=4.4 participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: mod_overhead_time=6.4 participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: mod_overhead_time=26.4 participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: mod_overhead_time=23.5 participant=Text::Table::TinyWide
   Text::TabularDisplay: mod_overhead_time=3.4 participant=Text::TabularDisplay
   Text::UnicodeBox::Table: mod_overhead_time=161.4 participant=Text::UnicodeBox::Table
   perl -e1 (baseline): mod_overhead_time=0 participant=perl -e1 (baseline)

=for html <img src="data:image/png;base64, " />


To display as an interactive HTML table on a browser, you can add option C<--format html+datatables>.

=head1 SAMPLE OUTPUTS

This section shows what the output is like for (some of the) modules:

=over

=item * L</Text::Table::Any>

 +--------+--------+--------+
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 +--------+--------+--------+

=item * L</Text::SimpleTable>

 .-----------+-----------+-----------.
 | col1      | col2      | col3      |
 +-----------+-----------+-----------+
 | row1.1    | row1.2    | row1.3    |
 | row2.1    | row2.2    | row2.3    |
 | row3.1    | row3.2    | row3.3    |
 | row4.1    | row4.2    | row4.3    |
 | row5.1    | row5.2    | row5.3    |
 '-----------+-----------+-----------'

=item * L</Text::Table::Manifold>

 +--------+--------+--------+
 |  col1  |  col2  |  col3  |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 +--------+--------+--------+

=item * L</Text::ANSITable>

 .--------+--------+--------.
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 `--------+--------+--------'

=item * L</Text::ASCIITable>

 .--------------------------.
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 '--------+--------+--------'

=item * L</Text::FormatTable>

 col1  |col2  |col3  
 row1.1|row1.2|row1.3
 row2.1|row2.2|row2.3
 row3.1|row3.2|row3.3
 row4.1|row4.2|row4.3
 row5.1|row5.2|row5.3

=item * L</Text::MarkdownTable>

 | col1   | col2   | col3   |
 |--------|--------|--------|
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |

=item * L</Text::Table>

 col1   col2   col3  
 row1.1 row1.2 row1.3
 row2.1 row2.2 row2.3
 row3.1 row3.2 row3.3
 row4.1 row4.2 row4.3
 row5.1 row5.2 row5.3

=item * L</Text::Table::Tiny>

 +--------+--------+--------+
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 +--------+--------+--------+

=item * L</Text::Table::TinyBorderStyle>

 .--------+--------+--------.
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 `--------+--------+--------'

=item * L</Text::Table::More>

 .--------+--------+--------.
 | col1   | col2   | col3   |
 +========+========+========+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 `--------+--------+--------'

=item * L</Text::Table::Sprintf>

 +--------+--------+--------+
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 +--------+--------+--------+

=item * L</Text::Table::TinyColor>

 +--------+--------+--------+
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 +--------+--------+--------+

=item * L</Text::Table::TinyColorWide>

 +--------+--------+--------+
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 +--------+--------+--------+

=item * L</Text::Table::TinyWide>

 +--------+--------+--------+
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 +--------+--------+--------+

=item * L</Text::Table::Org>

 | col1   | col2   | col3   |
 |--------+--------+--------|
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |

=item * L</Text::Table::CSV>

 "col1","col2","col3"
 "row1.1","row1.2","row1.3"
 "row2.1","row2.2","row2.3"
 "row3.1","row3.2","row3.3"
 "row4.1","row4.2","row4.3"
 "row5.1","row5.2","row5.3"

=item * L</Text::Table::HTML>

 <table>
 <thead>
 <tr><th>col1</th><th>col2</th><th>col3</th></tr>
 </thead>
 <tbody>
 <tr><td>row1.1</td><td>row1.2</td><td>row1.3</td></tr>
 <tr><td>row2.1</td><td>row2.2</td><td>row2.3</td></tr>
 <tr><td>row3.1</td><td>row3.2</td><td>row3.3</td></tr>
 <tr><td>row4.1</td><td>row4.2</td><td>row4.3</td></tr>
 <tr><td>row5.1</td><td>row5.2</td><td>row5.3</td></tr>
 </tbody>
 </table>

=item * L</Text::Table::HTML::DataTables>

 <html>
 <head>
 <link rel="stylesheet" type="text/css" href="file:///home/u1/perl5/perlbrew/perls/perl-5.34.0/lib/site_perl/5.34.0/auto/share/dist/Text-Table-HTML-DataTables/datatables-1.10.22/datatables.css">
 <script src="file:///home/u1/perl5/perlbrew/perls/perl-5.34.0/lib/site_perl/5.34.0/auto/share/dist/Text-Table-HTML-DataTables/jquery-2.2.4/jquery-2.2.4.min.js"></script>
 <script src="file:///home/u1/perl5/perlbrew/perls/perl-5.34.0/lib/site_perl/5.34.0/auto/share/dist/Text-Table-HTML-DataTables/datatables-1.10.22/datatables.js"></script>
 <script>var dt_opts = {"dom":"lQfrtip","buttons":["colvis","print"]}; $(document).ready(function() { $("table").DataTable(dt_opts); $("select[name=DataTables_Table_0_length]").val(1000); $("select[name=DataTables_Table_0_length]").trigger("change"); });</script>
 
 </head>
 
 <body>
 <table>
 <thead>
 <tr><th>col1</th><th>col2</th><th>col3</th></tr>
 </thead>
 <tbody>
 <tr><td>row1.1</td><td>row1.2</td><td>row1.3</td></tr>
 <tr><td>row2.1</td><td>row2.2</td><td>row2.3</td></tr>
 <tr><td>row3.1</td><td>row3.2</td><td>row3.3</td></tr>
 <tr><td>row4.1</td><td>row4.2</td><td>row4.3</td></tr>
 <tr><td>row5.1</td><td>row5.2</td><td>row5.3</td></tr>
 </tbody>
 </table>
 </body>
 
 </html>

=item * L</Text::TabularDisplay>

 +--------+--------+--------+
 | col1   | col2   | col3   |
 +--------+--------+--------+
 | row1.1 | row1.2 | row1.3 |
 | row2.1 | row2.2 | row2.3 |
 | row3.1 | row3.2 | row3.3 |
 | row4.1 | row4.2 | row4.3 |
 | row5.1 | row5.2 | row5.3 |
 +--------+--------+--------+

=back

=head1 FAQ

=head2 What is an Acme::CPANModules::* module?

An Acme::CPANModules::* module, like this module, contains just a list of module
names that share a common characteristics. It is a way to categorize modules and
document CPAN. See L<Acme::CPANModules> for more details.

=head2 What are ways to use this Acme::CPANModules module?

Aside from reading this Acme::CPANModules module's POD documentation, you can
install all the listed modules (entries) using L<cpanm-cpanmodules> script (from
L<App::cpanm::cpanmodules> distribution):

 % cpanm-cpanmodules -n TextTable

Alternatively you can use the L<cpanmodules> CLI (from L<App::cpanmodules>
distribution):

    % cpanmodules ls-entries TextTable | cpanm -n

or L<Acme::CM::Get>:

    % perl -MAcme::CM::Get=TextTable -E'say $_->{module} for @{ $LIST->{entries} }' | cpanm -n

or directly:

    % perl -MAcme::CPANModules::TextTable -E'say $_->{module} for @{ $Acme::CPANModules::TextTable::LIST->{entries} }' | cpanm -n

This Acme::CPANModules module contains benchmark instructions. You can run a
benchmark for some/all the modules listed in this Acme::CPANModules module using
the L<bencher> CLI (from L<Bencher> distribution):

    % bencher --cpanmodules-module TextTable

This Acme::CPANModules module also helps L<lcpan> produce a more meaningful
result for C<lcpan related-mods> command when it comes to finding related
modules for the modules listed in this Acme::CPANModules module.
See L<App::lcpan::Cmd::related_mods> for more details on how "related modules"
are found.

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModules-TextTable>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModules-TextTable>.

=head1 SEE ALSO

L<Acme::CPANModules::HTMLTable>

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 CONTRIBUTING


To contribute, you can send patches by email/via RT, or send pull requests on
GitHub.

Most of the time, you don't need to build the distribution yourself. You can
simply modify the code, then test via:

 % prove -l

If you want to build the distribution (e.g. to try to install it locally on your
system), you can install L<Dist::Zilla>,
L<Dist::Zilla::PluginBundle::Author::PERLANCAR>,
L<Pod::Weaver::PluginBundle::Author::PERLANCAR>, and sometimes one or two other
Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond
that are considered a bug and can be reported to me.

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2023, 2021, 2020, 2019 by perlancar <perlancar@cpan.org>.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModules-TextTable>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=cut
