package Acme::CPANModules::TextTable;

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

our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2023-10-31'; # DATE
our $DIST = 'Acme-CPANModules-TextTable'; # DIST
our $VERSION = '0.016'; # 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 => 'List of 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: List of modules that generate text tables

__END__

=pod

=encoding UTF-8

=head1 NAME

Acme::CPANModules::TextTable - List of modules that generate text tables

=head1 VERSION

This document describes version 0.016 of Acme::CPANModules::TextTable (from Perl distribution Acme-CPANModules-TextTable), released on 2023-10-31.

=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 *22)         | N/A *22)      | N/A *22)     | N/A *22)       | N/A *22)        | N/A *22)    | N/A *22)          | N/A *22)         | N/A *22)            | N/A *22)     | N/A *22)   | N/A *22)         | N/A *22)           | N/A *22)        | N/A *22)       | N/A               | N/A      | N/A                   | N/A                 | N/A             | N/A       |
 | Text::SimpleTable             | no             | no               | no            | no           | no             | no              | no          | yes *23)          | no               | no                  | no           | fast *24)  | 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           | slow       | 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 *25)           | 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           | slow       | 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 *26)             | 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 *27)     | 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          | slow       | 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          | fast *28)  | 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 *29)     | no             | N/A             | N/A         | N/A               | N/A              | yes *30)            | 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 *31)        | 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 *31)        | 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 *29)     | 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. Limited choice of 1 ASCII style and 1 UTF style

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

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

=item 26. Newlines stripped

=item 27. Does not draw borders

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

=item 29. Irrelevant

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

=item 31. Not converted to HTML color elements

=back

=head1 BENCHMARKED MODULES

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

L<Text::Table::Any> 0.115

L<Text::SimpleTable> 2.07

L<Text::UnicodeBox::Table>

L<Text::Table::Manifold> 1.03

L<Text::ANSITable> 0.609

L<Text::ASCIITable> 0.22

L<Text::FormatTable> 1.03

L<Text::MarkdownTable> 0.3.1

L<Text::Table> 1.135

L<Text::Table::Tiny> 1.03

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.010

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 BENCHMARK SAMPLE RESULTS

=head2 Sample benchmark #1

Run on: perl: I<< v5.38.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-164-generic >>.

Benchmark command (default options):

 % bencher --cpanmodules-module TextTable

Result formatted as table (split, part 1 of 5):

 #table1#
 {dataset=>"large (30x300)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |      0.92 |    1100   |                 0.00% |             35566.44% |   0.0024  |      20 |
 | Text::ANSITable               |      1.8  |     560   |                94.68% |             18220.90% |   0.0012  |      20 |
 | Text::Table::More             |      2.5  |     400   |               167.94% |             13211.33% |   0.00094 |      20 |
 | Text::ASCIITable              |      9.6  |     100   |               934.43% |              3347.94% |   0.00076 |      20 |
 | Text::Table::TinyColorWide    |     10    |      70   |              1365.67% |              2333.45% |   0.0008  |      20 |
 | Text::FormatTable             |     15    |      69   |              1474.71% |              2164.95% |   0.00063 |      20 |
 | Text::Table::TinyWide         |     20    |      50   |              1927.24% |              1659.36% |   0.00058 |      20 |
 | Text::SimpleTable             |     26    |      38   |              2719.79% |              1164.86% |   0.00033 |      20 |
 | Text::Table::Manifold         |     30    |      30   |              3432.47% |               909.67% |   0.00039 |      20 |
 | Text::Table::Tiny             |     30    |      30   |              3660.87% |               848.36% |   0.00043 |      20 |
 | Text::TabularDisplay          |     40    |      30   |              4123.89% |               744.40% |   0.00046 |      20 |
 | Text::Table::HTML             |     50    |      20   |              4776.96% |               631.33% |   0.00036 |      20 |
 | Text::Table::TinyColor        |     50    |      20   |              5139.30% |               580.75% |   0.00056 |      20 |
 | Text::MarkdownTable           |     60    |      20   |              6854.90% |               412.82% |   0.00035 |      20 |
 | Text::Table                   |     90    |      10   |              9175.49% |               284.52% |   0.00026 |      20 |
 | Text::Table::HTML::DataTables |    100    |      10   |             10410.10% |               239.35% |   0.00018 |      20 |
 | Text::Table::TinyBorderStyle  |    200    |       6   |             19509.01% |                81.89% |   0.00011 |      20 |
 | Text::Table::Org              |    200    |       5   |             20190.87% |                75.78% |   0.00013 |      20 |
 | Text::Table::CSV              |    200    |       4.9 |             21769.21% |                63.09% | 4.3e-05   |      20 |
 | Text::Table::Sprintf          |    300    |       4   |             28690.71% |                23.88% | 7.4e-05   |      20 |
 | Text::Table::Any              |    300    |       3   |             35566.44% |                 0.00% | 3.3e-05   |      20 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

The above result formatted in L<Benchmark.pm|Benchmark> style:

                                   Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::ASCIITable  Text::Table::TinyColorWide  Text::FormatTable  Text::Table::TinyWide  Text::SimpleTable  Text::Table::Manifold  Text::Table::Tiny  Text::TabularDisplay  Text::Table::HTML  Text::Table::TinyColor  Text::MarkdownTable  Text::Table  Text::Table::HTML::DataTables  Text::Table::TinyBorderStyle  Text::Table::Org  Text::Table::CSV  Text::Table::Sprintf  Text::Table::Any 
  Text::UnicodeBox::Table        0.92/s                       --             -49%               -63%              -90%                        -93%               -93%                   -95%               -96%                   -97%               -97%                  -97%               -98%                    -98%                 -98%         -99%                           -99%                          -99%              -99%              -99%                  -99%              -99% 
  Text::ANSITable                 1.8/s                      96%               --               -28%              -82%                        -87%               -87%                   -91%               -93%                   -94%               -94%                  -94%               -96%                    -96%                 -96%         -98%                           -98%                          -98%              -99%              -99%                  -99%              -99% 
  Text::Table::More               2.5/s                     175%              39%                 --              -75%                        -82%               -82%                   -87%               -90%                   -92%               -92%                  -92%               -95%                    -95%                 -95%         -97%                           -97%                          -98%              -98%              -98%                  -99%              -99% 
  Text::ASCIITable                9.6/s                    1000%             459%               300%                --                        -30%               -31%                   -50%               -62%                   -70%               -70%                  -70%               -80%                    -80%                 -80%         -90%                           -90%                          -94%              -95%              -95%                  -96%              -97% 
  Text::Table::TinyColorWide       10/s                    1471%             700%               471%               42%                          --                -1%                   -28%               -45%                   -57%               -57%                  -57%               -71%                    -71%                 -71%         -85%                           -85%                          -91%              -92%              -93%                  -94%              -95% 
  Text::FormatTable                15/s                    1494%             711%               479%               44%                          1%                 --                   -27%               -44%                   -56%               -56%                  -56%               -71%                    -71%                 -71%         -85%                           -85%                          -91%              -92%              -92%                  -94%              -95% 
  Text::Table::TinyWide            20/s                    2100%            1019%               700%              100%                         39%                37%                     --               -24%                   -40%               -40%                  -40%               -60%                    -60%                 -60%         -80%                           -80%                          -88%              -90%              -90%                  -92%              -94% 
  Text::SimpleTable                26/s                    2794%            1373%               952%              163%                         84%                81%                    31%                 --                   -21%               -21%                  -21%               -47%                    -47%                 -47%         -73%                           -73%                          -84%              -86%              -87%                  -89%              -92% 
  Text::Table::Manifold            30/s                    3566%            1766%              1233%              233%                        133%               129%                    66%                26%                     --                 0%                    0%               -33%                    -33%                 -33%         -66%                           -66%                          -80%              -83%              -83%                  -86%              -90% 
  Text::Table::Tiny                30/s                    3566%            1766%              1233%              233%                        133%               129%                    66%                26%                     0%                 --                    0%               -33%                    -33%                 -33%         -66%                           -66%                          -80%              -83%              -83%                  -86%              -90% 
  Text::TabularDisplay             40/s                    3566%            1766%              1233%              233%                        133%               129%                    66%                26%                     0%                 0%                    --               -33%                    -33%                 -33%         -66%                           -66%                          -80%              -83%              -83%                  -86%              -90% 
  Text::Table::HTML                50/s                    5400%            2700%              1900%              400%                        250%               245%                   150%                89%                    50%                50%                   50%                 --                      0%                   0%         -50%                           -50%                          -70%              -75%              -75%                  -80%              -85% 
  Text::Table::TinyColor           50/s                    5400%            2700%              1900%              400%                        250%               245%                   150%                89%                    50%                50%                   50%                 0%                      --                   0%         -50%                           -50%                          -70%              -75%              -75%                  -80%              -85% 
  Text::MarkdownTable              60/s                    5400%            2700%              1900%              400%                        250%               245%                   150%                89%                    50%                50%                   50%                 0%                      0%                   --         -50%                           -50%                          -70%              -75%              -75%                  -80%              -85% 
  Text::Table                      90/s                   10900%            5500%              3900%              900%                        600%               590%                   400%               280%                   200%               200%                  200%               100%                    100%                 100%           --                             0%                          -40%              -50%              -51%                  -60%              -70% 
  Text::Table::HTML::DataTables   100/s                   10900%            5500%              3900%              900%                        600%               590%                   400%               280%                   200%               200%                  200%               100%                    100%                 100%           0%                             --                          -40%              -50%              -51%                  -60%              -70% 
  Text::Table::TinyBorderStyle    200/s                   18233%            9233%              6566%             1566%                       1066%              1050%                   733%               533%                   400%               400%                  400%               233%                    233%                 233%          66%                            66%                            --              -16%              -18%                  -33%              -50% 
  Text::Table::Org                200/s                   21900%           11100%              7900%             1900%                       1300%              1280%                   900%               660%                   500%               500%                  500%               300%                    300%                 300%         100%                           100%                           19%                --               -1%                  -19%              -40% 
  Text::Table::CSV                200/s                   22348%           11328%              8063%             1940%                       1328%              1308%                   920%               675%                   512%               512%                  512%               308%                    308%                 308%         104%                           104%                           22%                2%                --                  -18%              -38% 
  Text::Table::Sprintf            300/s                   27400%           13900%              9900%             2400%                       1650%              1625%                  1150%               850%                   650%               650%                  650%               400%                    400%                 400%         150%                           150%                           50%               25%               22%                    --              -25% 
  Text::Table::Any                300/s                   36566%           18566%             13233%             3233%                       2233%              2200%                  1566%              1166%                   900%               900%                  900%               566%                    566%                 566%         233%                           233%                          100%               66%               63%                   33%                -- 
 
 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

The above result presented as chart:

=begin html

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

=end html


Result formatted as table (split, part 2 of 5):

 #table2#
 {dataset=>"long (3x300)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |       7.4 |   140     |                 0.00% |             35069.88% |   0.0005  |      20 |
 | Text::ANSITable               |      17   |    58     |               132.94% |             14998.05% |   0.00043 |      21 |
 | Text::Table::More             |      21   |    49     |               178.85% |             12512.60% |   0.00046 |      20 |
 | Text::ASCIITable              |     100   |    10     |              1223.05% |              2558.25% |   0.00022 |      22 |
 | Text::FormatTable             |     100   |     8     |              1644.13% |              1916.47% |   0.00026 |      21 |
 | Text::Table::TinyColorWide    |     100   |     7     |              1789.53% |              1761.30% |   0.00016 |      20 |
 | Text::Table::TinyWide         |     200   |     5     |              2638.44% |              1184.31% | 6.1e-05   |      20 |
 | Text::SimpleTable             |     200   |     4     |              3188.50% |               969.48% | 8.7e-05   |      20 |
 | Text::Table::Manifold         |     300   |     3     |              3871.99% |               785.45% | 5.4e-05   |      21 |
 | Text::TabularDisplay          |     350   |     2.8   |              4714.43% |               630.51% | 8.9e-06   |      20 |
 | Text::Table::Tiny             |     380   |     2.7   |              4992.67% |               590.60% | 5.5e-06   |      20 |
 | Text::MarkdownTable           |     410   |     2.5   |              5417.46% |               537.43% | 6.7e-06   |      20 |
 | Text::Table                   |     500   |     2     |              6071.61% |               469.87% | 3.6e-05   |      20 |
 | Text::Table::TinyColor        |     570   |     1.8   |              7628.23% |               355.08% | 4.2e-06   |      20 |
 | Text::Table::HTML             |     590   |     1.7   |              7913.19% |               338.90% | 3.4e-06   |      20 |
 | Text::Table::HTML::DataTables |     890   |     1.1   |             12003.16% |               190.58% | 5.1e-06   |      20 |
 | Text::Table::TinyBorderStyle  |    1200   |     0.83  |             16229.83% |               115.37% | 6.6e-06   |      20 |
 | Text::Table::Org              |    1600   |     0.62  |             21670.38% |                61.55% | 6.6e-07   |      20 |
 | Text::Table::CSV              |    1730   |     0.579 |             23360.70% |                49.91% | 2.3e-07   |      20 |
 | Text::Table::Any              |    2500   |     0.4   |             33906.20% |                 3.42% | 4.3e-07   |      20 |
 | Text::Table::Sprintf          |    2590   |     0.386 |             35069.88% |                 0.00% | 1.6e-07   |      20 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

The above result formatted in L<Benchmark.pm|Benchmark> style:

                                   Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::ASCIITable  Text::FormatTable  Text::Table::TinyColorWide  Text::Table::TinyWide  Text::SimpleTable  Text::Table::Manifold  Text::TabularDisplay  Text::Table::Tiny  Text::MarkdownTable  Text::Table  Text::Table::TinyColor  Text::Table::HTML  Text::Table::HTML::DataTables  Text::Table::TinyBorderStyle  Text::Table::Org  Text::Table::CSV  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table         7.4/s                       --             -58%               -65%              -92%               -94%                        -95%                   -96%               -97%                   -97%                  -98%               -98%                 -98%         -98%                    -98%               -98%                           -99%                          -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                  17/s                     141%               --               -15%              -82%               -86%                        -87%                   -91%               -93%                   -94%                  -95%               -95%                 -95%         -96%                    -96%               -97%                           -98%                          -98%              -98%              -99%              -99%                  -99% 
  Text::Table::More                21/s                     185%              18%                 --              -79%               -83%                        -85%                   -89%               -91%                   -93%                  -94%               -94%                 -94%         -95%                    -96%               -96%                           -97%                          -98%              -98%              -98%              -99%                  -99% 
  Text::ASCIITable                100/s                    1300%             480%               390%                --               -19%                        -30%                   -50%               -60%                   -70%                  -72%               -73%                 -75%         -80%                    -82%               -83%                           -89%                          -91%              -93%              -94%              -96%                  -96% 
  Text::FormatTable               100/s                    1650%             625%               512%               25%                 --                        -12%                   -37%               -50%                   -62%                  -65%               -66%                 -68%         -75%                    -77%               -78%                           -86%                          -89%              -92%              -92%              -95%                  -95% 
  Text::Table::TinyColorWide      100/s                    1900%             728%               600%               42%                14%                          --                   -28%               -42%                   -57%                  -60%               -61%                 -64%         -71%                    -74%               -75%                           -84%                          -88%              -91%              -91%              -94%                  -94% 
  Text::Table::TinyWide           200/s                    2700%            1060%               880%              100%                60%                         39%                     --               -19%                   -40%                  -44%               -46%                 -50%         -60%                    -64%               -66%                           -78%                          -83%              -87%              -88%              -92%                  -92% 
  Text::SimpleTable               200/s                    3400%            1350%              1125%              150%               100%                         75%                    25%                 --                   -25%                  -30%               -32%                 -37%         -50%                    -55%               -57%                           -72%                          -79%              -84%              -85%              -90%                  -90% 
  Text::Table::Manifold           300/s                    4566%            1833%              1533%              233%               166%                        133%                    66%                33%                     --                   -6%                -9%                 -16%         -33%                    -40%               -43%                           -63%                          -72%              -79%              -80%              -86%                  -87% 
  Text::TabularDisplay            350/s                    4900%            1971%              1650%              257%               185%                        150%                    78%                42%                     7%                    --                -3%                 -10%         -28%                    -35%               -39%                           -60%                          -70%              -77%              -79%              -85%                  -86% 
  Text::Table::Tiny               380/s                    5085%            2048%              1714%              270%               196%                        159%                    85%                48%                    11%                    3%                 --                  -7%         -25%                    -33%               -37%                           -59%                          -69%              -77%              -78%              -85%                  -85% 
  Text::MarkdownTable             410/s                    5500%            2220%              1860%              300%               220%                        179%                   100%                60%                    19%                   11%                 8%                   --         -19%                    -28%               -32%                           -55%                          -66%              -75%              -76%              -84%                  -84% 
  Text::Table                     500/s                    6900%            2800%              2350%              400%               300%                        250%                   150%               100%                    50%                   39%                35%                  25%           --                     -9%               -15%                           -44%                          -58%              -69%              -71%              -80%                  -80% 
  Text::Table::TinyColor          570/s                    7677%            3122%              2622%              455%               344%                        288%                   177%               122%                    66%                   55%                50%                  38%          11%                      --                -5%                           -38%                          -53%              -65%              -67%              -77%                  -78% 
  Text::Table::HTML               590/s                    8135%            3311%              2782%              488%               370%                        311%                   194%               135%                    76%                   64%                58%                  47%          17%                      5%                 --                           -35%                          -51%              -63%              -65%              -76%                  -77% 
  Text::Table::HTML::DataTables   890/s                   12627%            5172%              4354%              809%               627%                        536%                   354%               263%                   172%                  154%               145%                 127%          81%                     63%                54%                             --                          -24%              -43%              -47%              -63%                  -64% 
  Text::Table::TinyBorderStyle   1200/s                   16767%            6887%              5803%             1104%               863%                        743%                   502%               381%                   261%                  237%               225%                 201%         140%                    116%               104%                            32%                            --              -25%              -30%              -51%                  -53% 
  Text::Table::Org               1600/s                   22480%            9254%              7803%             1512%              1190%                       1029%                   706%               545%                   383%                  351%               335%                 303%         222%                    190%               174%                            77%                           33%                --               -6%              -35%                  -37% 
  Text::Table::CSV               1730/s                   24079%            9917%              8362%             1627%              1281%                       1108%                   763%               590%                   418%                  383%               366%                 331%         245%                    210%               193%                            89%                           43%                7%                --              -30%                  -33% 
  Text::Table::Any               2500/s                   34900%           14400%             12150%             2400%              1900%                       1650%                  1150%               900%                   650%                  599%               575%                 525%         400%                    350%               325%                           175%                          107%               54%               44%                --                   -3% 
  Text::Table::Sprintf           2590/s                   36169%           14925%             12594%             2490%              1972%                       1713%                  1195%               936%                   677%                  625%               599%                 547%         418%                    366%               340%                           184%                          115%               60%               49%                3%                    -- 
 
 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

The above result presented as chart:

=begin html

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

=end html


Result formatted as table (split, part 3 of 5):

 #table3#
 {dataset=>"small (3x5)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |       200 |    6      |                 0.00% |             55334.94% |   0.00017 |      20 |
 | Text::ANSITable               |       690 |    1.5    |               340.32% |             12489.56% | 5.2e-06   |      20 |
 | Text::Table::More             |       990 |    1      |               531.41% |              8679.51% | 2.9e-06   |      20 |
 | Text::Table::TinyBorderStyle  |      3800 |    0.26   |              2336.25% |              2175.42% | 3.8e-07   |      22 |
 | Text::Table::TinyWide         |      4000 |    0.3    |              2408.28% |              2110.08% | 2.7e-06   |      20 |
 | Text::ASCIITable              |      4700 |    0.21   |              2923.90% |              1733.22% | 6.5e-07   |      20 |
 | Text::TabularDisplay          |      6500 |    0.154  |              4055.56% |              1233.99% | 5.6e-08   |      24 |
 | Text::FormatTable             |      7070 |    0.141  |              4424.33% |              1125.26% | 1.1e-07   |      21 |
 | Text::Table::Manifold         |      7300 |    0.14   |              4558.22% |              1090.05% | 6.6e-07   |      20 |
 | Text::Table::HTML::DataTables |      7410 |    0.135  |              4639.87% |              1069.55% | 1.2e-07   |      20 |
 | Text::Table::TinyColorWide    |      7600 |    0.13   |              4790.08% |              1033.62% | 1.5e-07   |      21 |
 | Text::Table                   |      7700 |    0.13   |              4851.51% |              1019.56% | 2.1e-07   |      20 |
 | Text::MarkdownTable           |     12400 |    0.0805 |              7842.12% |               597.99% | 5.7e-08   |      20 |
 | Text::SimpleTable             |     13000 |    0.077  |              8169.66% |               570.34% | 8.8e-08   |      21 |
 | Text::Table::Tiny             |     14800 |    0.0676 |              9362.84% |               485.82% | 4.6e-08   |      20 |
 | Text::Table::TinyColor        |     22000 |    0.044  |             14278.48% |               285.54% | 1.8e-07   |      20 |
 | Text::Table::HTML             |     29000 |    0.034  |             18554.36% |               197.17% |   7e-08   |      20 |
 | Text::Table::CSV              |     45000 |    0.022  |             28952.94% |                90.81% | 2.6e-08   |      24 |
 | Text::Table::Org              |     51700 |    0.0193 |             32959.88% |                67.68% | 8.2e-09   |      21 |
 | Text::Table::Any              |     74100 |    0.0135 |             47322.43% |                16.90% | 8.8e-09   |      20 |
 | Text::Table::Sprintf          |     86700 |    0.0115 |             55334.94% |                 0.00% | 5.7e-09   |      21 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

The above result formatted in L<Benchmark.pm|Benchmark> style:

                                    Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::Table::TinyWide  Text::Table::TinyBorderStyle  Text::ASCIITable  Text::TabularDisplay  Text::FormatTable  Text::Table::Manifold  Text::Table::HTML::DataTables  Text::Table::TinyColorWide  Text::Table  Text::MarkdownTable  Text::SimpleTable  Text::Table::Tiny  Text::Table::TinyColor  Text::Table::HTML  Text::Table::CSV  Text::Table::Org  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table          200/s                       --             -75%               -83%                   -95%                          -95%              -96%                  -97%               -97%                   -97%                           -97%                        -97%         -97%                 -98%               -98%               -98%                    -99%               -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                  690/s                     300%               --               -33%                   -80%                          -82%              -86%                  -89%               -90%                   -90%                           -91%                        -91%         -91%                 -94%               -94%               -95%                    -97%               -97%              -98%              -98%              -99%                  -99% 
  Text::Table::More                990/s                     500%              50%                 --                   -70%                          -74%              -79%                  -84%               -85%                   -86%                           -86%                        -87%         -87%                 -91%               -92%               -93%                    -95%               -96%              -97%              -98%              -98%                  -98% 
  Text::Table::TinyWide           4000/s                    1900%             400%               233%                     --                          -13%              -30%                  -48%               -53%                   -53%                           -54%                        -56%         -56%                 -73%               -74%               -77%                    -85%               -88%              -92%              -93%              -95%                  -96% 
  Text::Table::TinyBorderStyle    3800/s                    2207%             476%               284%                    15%                            --              -19%                  -40%               -45%                   -46%                           -48%                        -50%         -50%                 -69%               -70%               -74%                    -83%               -86%              -91%              -92%              -94%                  -95% 
  Text::ASCIITable                4700/s                    2757%             614%               376%                    42%                           23%                --                  -26%               -32%                   -33%                           -35%                        -38%         -38%                 -61%               -63%               -67%                    -79%               -83%              -89%              -90%              -93%                  -94% 
  Text::TabularDisplay            6500/s                    3796%             874%               549%                    94%                           68%               36%                    --                -8%                    -9%                           -12%                        -15%         -15%                 -47%               -50%               -56%                    -71%               -77%              -85%              -87%              -91%                  -92% 
  Text::FormatTable               7070/s                    4155%             963%               609%                   112%                           84%               48%                    9%                 --                     0%                            -4%                         -7%          -7%                 -42%               -45%               -52%                    -68%               -75%              -84%              -86%              -90%                  -91% 
  Text::Table::Manifold           7300/s                    4185%             971%               614%                   114%                           85%               49%                    9%                 0%                     --                            -3%                         -7%          -7%                 -42%               -45%               -51%                    -68%               -75%              -84%              -86%              -90%                  -91% 
  Text::Table::HTML::DataTables   7410/s                    4344%            1011%               640%                   122%                           92%               55%                   14%                 4%                     3%                             --                         -3%          -3%                 -40%               -42%               -49%                    -67%               -74%              -83%              -85%              -90%                  -91% 
  Text::Table::TinyColorWide      7600/s                    4515%            1053%               669%                   130%                          100%               61%                   18%                 8%                     7%                             3%                          --           0%                 -38%               -40%               -48%                    -66%               -73%              -83%              -85%              -89%                  -91% 
  Text::Table                     7700/s                    4515%            1053%               669%                   130%                          100%               61%                   18%                 8%                     7%                             3%                          0%           --                 -38%               -40%               -48%                    -66%               -73%              -83%              -85%              -89%                  -91% 
  Text::MarkdownTable            12400/s                    7353%            1763%              1142%                   272%                          222%              160%                   91%                75%                    73%                            67%                         61%          61%                   --                -4%               -16%                    -45%               -57%              -72%              -76%              -83%                  -85% 
  Text::SimpleTable              13000/s                    7692%            1848%              1198%                   289%                          237%              172%                  100%                83%                    81%                            75%                         68%          68%                   4%                 --               -12%                    -42%               -55%              -71%              -74%              -82%                  -85% 
  Text::Table::Tiny              14800/s                    8775%            2118%              1379%                   343%                          284%              210%                  127%               108%                   107%                            99%                         92%          92%                  19%                13%                 --                    -34%               -49%              -67%              -71%              -80%                  -82% 
  Text::Table::TinyColor         22000/s                   13536%            3309%              2172%                   581%                          490%              377%                  250%               220%                   218%                           206%                        195%         195%                  82%                75%                53%                      --               -22%              -50%              -56%              -69%                  -73% 
  Text::Table::HTML              29000/s                   17547%            4311%              2841%                   782%                          664%              517%                  352%               314%                   311%                           297%                        282%         282%                 136%               126%                98%                     29%                 --              -35%              -43%              -60%                  -66% 
  Text::Table::CSV               45000/s                   27172%            6718%              4445%                  1263%                         1081%              854%                  600%               540%                   536%                           513%                        490%         490%                 265%               250%               207%                    100%                54%                --              -12%              -38%                  -47% 
  Text::Table::Org               51700/s                   30988%            7672%              5081%                  1454%                         1247%              988%                  697%               630%                   625%                           599%                        573%         573%                 317%               298%               250%                    127%                76%               13%                --              -30%                  -40% 
  Text::Table::Any               74100/s                   44344%           11011%              7307%                  2122%                         1825%             1455%                 1040%               944%                   937%                           900%                        862%         862%                 496%               470%               400%                    225%               151%               62%               42%                --                  -14% 
  Text::Table::Sprintf           86700/s                   52073%           12943%              8595%                  2508%                         2160%             1726%                 1239%              1126%                  1117%                          1073%                       1030%        1030%                 600%               569%               487%                    282%               195%               91%               67%               17%                    -- 
 
 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

The above result presented as chart:

=begin html

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

=end html


Result formatted as table (split, part 4 of 5):

 #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% |             81511.84% |   7e-05 |      20 |
 | Text::ANSITable               |      2000 |   0.6     |               345.42% |             18222.60% | 1.7e-05 |      20 |
 | Text::Table::More             |      3100 |   0.32    |               765.49% |              9329.53% | 1.4e-06 |      20 |
 | Text::Table::TinyBorderStyle  |      4500 |   0.22    |              1159.08% |              6381.86% | 9.5e-07 |      20 |
 | Text::Table::Manifold         |     14000 |   0.074   |              3687.92% |              2054.53% | 1.5e-07 |      20 |
 | Text::ASCIITable              |     18000 |   0.056   |              4864.62% |              1543.87% | 9.3e-08 |      21 |
 | Text::Table::HTML::DataTables |     19000 |   0.054   |              5093.75% |              1471.35% | 7.7e-08 |      21 |
 | Text::Table::TinyWide         |     20000 |   0.05    |              5409.22% |              1381.37% | 7.5e-07 |      20 |
 | Text::Table                   |     21300 |   0.0469  |              5845.42% |              1272.68% |   4e-08 |      20 |
 | Text::MarkdownTable           |     25000 |   0.04    |              6865.20% |              1071.71% | 1.5e-07 |      20 |
 | Text::TabularDisplay          |     30000 |   0.03    |              9444.99% |               755.02% | 1.4e-06 |      30 |
 | Text::FormatTable             |     35700 |   0.028   |              9856.57% |               719.68% | 2.7e-08 |      20 |
 | Text::Table::TinyColorWide    |     45400 |   0.022   |             12542.38% |               545.54% | 1.2e-08 |      20 |
 | Text::Table::Tiny             |     52400 |   0.0191  |             14513.24% |               458.48% | 1.7e-08 |      20 |
 | Text::Table::TinyColor        |     50000 |   0.02    |             15110.40% |               436.55% |   9e-07 |      25 |
 | Text::Table::HTML             |     62200 |   0.0161  |             17223.24% |               371.11% | 5.9e-09 |      22 |
 | Text::SimpleTable             |     64700 |   0.0154  |             17934.63% |               352.53% | 1.3e-08 |      20 |
 | Text::Table::Org              |    145000 |   0.00691 |             40228.25% |               102.37% |   2e-09 |      20 |
 | Text::Table::Any              |    191000 |   0.00525 |             52985.72% |                53.74% | 2.6e-09 |      20 |
 | Text::Table::Sprintf          |    272000 |   0.00367 |             75724.38% |                 7.63% | 1.7e-09 |      22 |
 | Text::Table::CSV              |    293000 |   0.00341 |             81511.84% |                 0.00% | 2.1e-09 |      21 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+

The above result formatted in L<Benchmark.pm|Benchmark> style:

                                     Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::Table::TinyBorderStyle  Text::Table::Manifold  Text::ASCIITable  Text::Table::HTML::DataTables  Text::Table::TinyWide  Text::Table  Text::MarkdownTable  Text::TabularDisplay  Text::FormatTable  Text::Table::TinyColorWide  Text::Table::TinyColor  Text::Table::Tiny  Text::Table::HTML  Text::SimpleTable  Text::Table::Org  Text::Table::Any  Text::Table::Sprintf  Text::Table::CSV 
  Text::UnicodeBox::Table           400/s                       --             -80%               -89%                          -92%                   -97%              -98%                           -98%                   -98%         -98%                 -98%                  -99%               -99%                        -99%                    -99%               -99%               -99%               -99%              -99%              -99%                  -99%              -99% 
  Text::ANSITable                  2000/s                     400%               --               -46%                          -63%                   -87%              -90%                           -91%                   -91%         -92%                 -93%                  -95%               -95%                        -96%                    -96%               -96%               -97%               -97%              -98%              -99%                  -99%              -99% 
  Text::Table::More                3100/s                     837%              87%                 --                          -31%                   -76%              -82%                           -83%                   -84%         -85%                 -87%                  -90%               -91%                        -93%                    -93%               -94%               -94%               -95%              -97%              -98%                  -98%              -98% 
  Text::Table::TinyBorderStyle     4500/s                    1263%             172%                45%                            --                   -66%              -74%                           -75%                   -77%         -78%                 -81%                  -86%               -87%                        -90%                    -90%               -91%               -92%               -93%              -96%              -97%                  -98%              -98% 
  Text::Table::Manifold           14000/s                    3954%             710%               332%                          197%                     --              -24%                           -27%                   -32%         -36%                 -45%                  -59%               -62%                        -70%                    -72%               -74%               -78%               -79%              -90%              -92%                  -95%              -95% 
  Text::ASCIITable                18000/s                    5257%             971%               471%                          292%                    32%                --                            -3%                   -10%         -16%                 -28%                  -46%               -50%                        -60%                    -64%               -65%               -71%               -72%              -87%              -90%                  -93%              -93% 
  Text::Table::HTML::DataTables   19000/s                    5455%            1011%               492%                          307%                    37%                3%                             --                    -7%         -13%                 -25%                  -44%               -48%                        -59%                    -62%               -64%               -70%               -71%              -87%              -90%                  -93%              -93% 
  Text::Table::TinyWide           20000/s                    5900%            1099%               540%                          339%                    47%               11%                             7%                     --          -6%                 -20%                  -40%               -44%                        -56%                    -60%               -61%               -67%               -69%              -86%              -89%                  -92%              -93% 
  Text::Table                     21300/s                    6296%            1179%               582%                          369%                    57%               19%                            15%                     6%           --                 -14%                  -36%               -40%                        -53%                    -57%               -59%               -65%               -67%              -85%              -88%                  -92%              -92% 
  Text::MarkdownTable             25000/s                    7400%            1400%               700%                          450%                    84%               39%                            34%                    25%          17%                   --                  -25%               -30%                        -45%                    -50%               -52%               -59%               -61%              -82%              -86%                  -90%              -91% 
  Text::TabularDisplay            30000/s                    9900%            1900%               966%                          633%                   146%               86%                            80%                    66%          56%                  33%                    --                -6%                        -26%                    -33%               -36%               -46%               -48%              -76%              -82%                  -87%              -88% 
  Text::FormatTable               35700/s                   10614%            2042%              1042%                          685%                   164%              100%                            92%                    78%          67%                  42%                    7%                 --                        -21%                    -28%               -31%               -42%               -44%              -75%              -81%                  -86%              -87% 
  Text::Table::TinyColorWide      45400/s                   13536%            2627%              1354%                          900%                   236%              154%                           145%                   127%         113%                  81%                   36%                27%                          --                     -9%               -13%               -26%               -29%              -68%              -76%                  -83%              -84% 
  Text::Table::TinyColor          50000/s                   14900%            2900%              1500%                         1000%                   270%              179%                           169%                   150%         134%                 100%                   50%                39%                          9%                      --                -4%               -19%               -23%              -65%              -73%                  -81%              -82% 
  Text::Table::Tiny               52400/s                   15606%            3041%              1575%                         1051%                   287%              193%                           182%                   161%         145%                 109%                   57%                46%                         15%                      4%                 --               -15%               -19%              -63%              -72%                  -80%              -82% 
  Text::Table::HTML               62200/s                   18533%            3626%              1887%                         1266%                   359%              247%                           235%                   210%         191%                 148%                   86%                73%                         36%                     24%                18%                 --                -4%              -57%              -67%                  -77%              -78% 
  Text::SimpleTable               64700/s                   19380%            3796%              1977%                         1328%                   380%              263%                           250%                   224%         204%                 159%                   94%                81%                         42%                     29%                24%                 4%                 --              -55%              -65%                  -76%              -77% 
  Text::Table::Org               145000/s                   43315%            8583%              4530%                         3083%                   970%              710%                           681%                   623%         578%                 478%                  334%               305%                        218%                    189%               176%               132%               122%                --              -24%                  -46%              -50% 
  Text::Table::Any               191000/s                   57042%           11328%              5995%                         4090%                  1309%              966%                           928%                   852%         793%                 661%                  471%               433%                        319%                    280%               263%               206%               193%               31%                --                  -30%              -35% 
  Text::Table::Sprintf           272000/s                   81643%           16248%              8619%                         5894%                  1916%             1425%                          1371%                  1262%        1177%                 989%                  717%               662%                        499%                    444%               420%               338%               319%               88%               43%                    --               -7% 
  Text::Table::CSV               293000/s                   87876%           17495%              9284%                         6351%                  2070%             1542%                          1483%                  1366%        1275%                1073%                  779%               721%                        545%                    486%               460%               372%               351%              102%               53%                    7%                -- 
 
 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

The above result presented as chart:

=begin html

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

=end html


Result formatted as table (split, part 5 of 5):

 #table5#
 {dataset=>"wide (30x5)"}
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | participant                   | rate (/s) | time (ms) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |        33 |   30      |                 0.00% |             40107.73% |   0.00028 |      20 |
 | Text::ANSITable               |        70 |   10      |               112.30% |             18838.85% |   0.00034 |      20 |
 | Text::Table::More             |       100 |    9      |               242.25% |             11648.22% |   0.00016 |      20 |
 | Text::ASCIITable              |       450 |    2.2    |              1269.60% |              2835.73% | 1.8e-05   |      21 |
 | Text::FormatTable             |       650 |    1.5    |              1867.35% |              1943.75% | 1.2e-05   |      20 |
 | Text::Table::TinyColorWide    |       830 |    1.2    |              2401.71% |              1507.21% | 3.5e-06   |      20 |
 | Text::Table::TinyBorderStyle  |       900 |    1      |              2611.90% |              1382.64% | 1.7e-05   |      20 |
 | Text::Table                   |      1200 |    0.87   |              3377.43% |              1056.25% | 1.5e-06   |      20 |
 | Text::Table::Tiny             |      1000 |    0.8    |              3482.31% |              1022.40% | 3.8e-05   |      29 |
 | Text::Table::TinyWide         |      1200 |    0.83   |              3524.20% |              1009.42% |   1e-06   |      20 |
 | Text::SimpleTable             |      1580 |    0.633  |              4667.39% |               743.39% | 5.8e-07   |      21 |
 | Text::Table::Manifold         |      1700 |    0.6    |              4936.57% |               698.32% | 7.9e-07   |      20 |
 | Text::TabularDisplay          |      2300 |    0.44   |              6812.25% |               481.69% | 7.1e-07   |      20 |
 | Text::Table::TinyColor        |      2900 |    0.35   |              8603.40% |               361.98% |   5e-07   |      20 |
 | Text::Table::HTML             |      3370 |    0.297  |             10075.60% |               295.14% | 1.7e-07   |      20 |
 | Text::MarkdownTable           |      3400 |    0.3    |             10085.88% |               294.74% | 3.2e-07   |      20 |
 | Text::Table::HTML::DataTables |      4100 |    0.24   |             12334.13% |               223.37% | 7.8e-07   |      20 |
 | Text::Table::Sprintf          |      5260 |    0.19   |             15772.29% |               153.32% | 5.1e-08   |      21 |
 | Text::Table::Org              |      7800 |    0.13   |             23583.00% |                69.77% | 2.8e-07   |      20 |
 | Text::Table::CSV              |     11000 |    0.088  |             34210.03% |                17.19% | 1.6e-07   |      20 |
 | Text::Table::Any              |     13300 |    0.0751 |             40107.73% |                 0.00% | 4.5e-08   |      20 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

The above result formatted in L<Benchmark.pm|Benchmark> style:

                                    Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::ASCIITable  Text::FormatTable  Text::Table::TinyColorWide  Text::Table::TinyBorderStyle  Text::Table  Text::Table::TinyWide  Text::Table::Tiny  Text::SimpleTable  Text::Table::Manifold  Text::TabularDisplay  Text::Table::TinyColor  Text::MarkdownTable  Text::Table::HTML  Text::Table::HTML::DataTables  Text::Table::Sprintf  Text::Table::Org  Text::Table::CSV  Text::Table::Any 
  Text::UnicodeBox::Table           33/s                       --             -66%               -70%              -92%               -95%                        -96%                          -96%         -97%                   -97%               -97%               -97%                   -98%                  -98%                    -98%                 -99%               -99%                           -99%                  -99%              -99%              -99%              -99% 
  Text::ANSITable                   70/s                     200%               --                -9%              -78%               -85%                        -88%                          -90%         -91%                   -91%               -92%               -93%                   -94%                  -95%                    -96%                 -97%               -97%                           -97%                  -98%              -98%              -99%              -99% 
  Text::Table::More                100/s                     233%              11%                 --              -75%               -83%                        -86%                          -88%         -90%                   -90%               -91%               -92%                   -93%                  -95%                    -96%                 -96%               -96%                           -97%                  -97%              -98%              -99%              -99% 
  Text::ASCIITable                 450/s                    1263%             354%               309%                --               -31%                        -45%                          -54%         -60%                   -62%               -63%               -71%                   -72%                  -80%                    -84%                 -86%               -86%                           -89%                  -91%              -94%              -96%              -96% 
  Text::FormatTable                650/s                    1900%             566%               500%               46%                 --                        -20%                          -33%         -42%                   -44%               -46%               -57%                   -60%                  -70%                    -76%                 -80%               -80%                           -84%                  -87%              -91%              -94%              -94% 
  Text::Table::TinyColorWide       830/s                    2400%             733%               650%               83%                25%                          --                          -16%         -27%                   -30%               -33%               -47%                   -50%                  -63%                    -70%                 -75%               -75%                           -80%                  -84%              -89%              -92%              -93% 
  Text::Table::TinyBorderStyle     900/s                    2900%             900%               800%              120%                50%                         19%                            --         -13%                   -17%               -19%               -36%                   -40%                  -56%                    -65%                 -70%               -70%                           -76%                  -81%              -87%              -91%              -92% 
  Text::Table                     1200/s                    3348%            1049%               934%              152%                72%                         37%                           14%           --                    -4%                -8%               -27%                   -31%                  -49%                    -59%                 -65%               -65%                           -72%                  -78%              -85%              -89%              -91% 
  Text::Table::TinyWide           1200/s                    3514%            1104%               984%              165%                80%                         44%                           20%           4%                     --                -3%               -23%                   -27%                  -46%                    -57%                 -63%               -64%                           -71%                  -77%              -84%              -89%              -90% 
  Text::Table::Tiny               1000/s                    3650%            1150%              1025%              175%                87%                         49%                           25%           8%                     3%                 --               -20%                   -25%                  -45%                    -56%                 -62%               -62%                           -70%                  -76%              -83%              -89%              -90% 
  Text::SimpleTable               1580/s                    4639%            1479%              1321%              247%               136%                         89%                           57%          37%                    31%                26%                 --                    -5%                  -30%                    -44%                 -52%               -53%                           -62%                  -69%              -79%              -86%              -88% 
  Text::Table::Manifold           1700/s                    4900%            1566%              1400%              266%               150%                        100%                           66%          44%                    38%                33%                 5%                     --                  -26%                    -41%                 -50%               -50%                           -60%                  -68%              -78%              -85%              -87% 
  Text::TabularDisplay            2300/s                    6718%            2172%              1945%              400%               240%                        172%                          127%          97%                    88%                81%                43%                    36%                    --                    -20%                 -31%               -32%                           -45%                  -56%              -70%              -80%              -82% 
  Text::Table::TinyColor          2900/s                    8471%            2757%              2471%              528%               328%                        242%                          185%         148%                   137%               128%                80%                    71%                   25%                      --                 -14%               -15%                           -31%                  -45%              -62%              -74%              -78% 
  Text::MarkdownTable             3400/s                    9900%            3233%              2900%              633%               400%                        300%                          233%         190%                   176%               166%               111%                   100%                   46%                     16%                   --                -1%                           -19%                  -36%              -56%              -70%              -74% 
  Text::Table::HTML               3370/s                   10001%            3267%              2930%              640%               405%                        304%                          236%         192%                   179%               169%               113%                   102%                   48%                     17%                   1%                 --                           -19%                  -36%              -56%              -70%              -74% 
  Text::Table::HTML::DataTables   4100/s                   12400%            4066%              3650%              816%               525%                        400%                          316%         262%                   245%               233%               163%                   150%                   83%                     45%                  25%                23%                             --                  -20%              -45%              -63%              -68% 
  Text::Table::Sprintf            5260/s                   15689%            5163%              4636%             1057%               689%                        531%                          426%         357%                   336%               321%               233%                   215%                  131%                     84%                  57%                56%                            26%                    --              -31%              -53%              -60% 
  Text::Table::Org                7800/s                   22976%            7592%              6823%             1592%              1053%                        823%                          669%         569%                   538%               515%               386%                   361%                  238%                    169%                 130%               128%                            84%                   46%                --              -32%              -42% 
  Text::Table::CSV               11000/s                   33990%           11263%             10127%             2400%              1604%                       1263%                         1036%         888%                   843%               809%               619%                   581%                  400%                    297%                 240%               237%                           172%                  115%               47%                --              -14% 
  Text::Table::Any               13300/s                   39846%           13215%             11884%             2829%              1897%                       1497%                         1231%        1058%                  1005%               965%               742%                   698%                  485%                    366%                 299%               295%                           219%                  152%               73%               17%                -- 
 
 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

The above result presented as chart:

=begin html

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

=end html


=head2 Sample benchmark #2

Benchmark command (benchmarking module startup overhead):

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

Result formatted as table:

 #table6#
 +-------------------------------+-----------+----------------------+-----------------------+-----------------------+-----------+---------+
 | participant                   | time (ms) |  mod_overhead_time   | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors   | samples |
 +-------------------------------+-----------+----------------------+-----------------------+-----------------------+-----------+---------+
 | Text::UnicodeBox::Table       |     190   | 181                  |                 0.00% |              2053.49% |   0.00061 |      20 |
 | Text::Table::Manifold         |     110   | 101                  |                75.66% |              1125.93% |   0.00039 |      20 |
 | Text::ANSITable               |      48   |  39                  |               286.81% |               456.73% |   0.00026 |      20 |
 | Text::MarkdownTable           |      46   |  37                  |               301.84% |               435.91% |   0.00031 |      21 |
 | Text::Table::TinyColorWide    |      40   |  31                  |               366.96% |               361.18% |   0.00029 |      20 |
 | Text::Table::TinyWide         |      36   |  27                  |               413.28% |               319.56% |   0.00014 |      22 |
 | Text::Table::More             |      28   |  19                  |               553.94% |               229.31% |   0.00019 |      20 |
 | Text::Table                   |      28   |  19                  |               568.31% |               222.23% |   0.00027 |      20 |
 | Text::ASCIITable              |      20   |  11                  |               781.19% |               144.38% |   0.00028 |      20 |
 | Text::Table::Tiny             |      21   |  12                  |               795.31% |               140.53% |   0.00017 |      20 |
 | Text::Table::TinyColor        |      20   |  11                  |               951.17% |               104.87% |   0.00042 |      21 |
 | Text::FormatTable             |      17   |   8                  |               988.23% |                97.89% |   0.00017 |      20 |
 | Text::Table::Any              |      10   |   1                  |              1195.57% |                66.22% |   0.00021 |      20 |
 | Text::Table::TinyBorderStyle  |      10   |   1                  |              1201.51% |                65.46% |   0.00019 |      21 |
 | Text::TabularDisplay          |      10   |   1                  |              1342.19% |                49.32% |   0.0002  |      20 |
 | Text::Table::Org              |      10   |   1                  |              1396.46% |                43.91% |   0.0002  |      20 |
 | Text::Table::HTML             |      10   |   1                  |              1400.52% |                43.52% |   0.00019 |      20 |
 | Text::SimpleTable             |      12   |   3                  |              1421.63% |                41.53% |   0.00011 |      20 |
 | Text::Table::HTML::DataTables |      10   |   1                  |              1463.78% |                37.71% |   0.00012 |      20 |
 | Text::Table::Sprintf          |       9.1 |   0.0999999999999996 |              1954.13% |                 4.84% | 7.3e-05   |      20 |
 | Text::Table::CSV              |       8.7 |  -0.300000000000001  |              2029.97% |                 1.10% | 3.8e-05   |      20 |
 | perl -e1 (baseline)           |       9   |   0                  |              2053.49% |                 0.00% | 8.9e-05   |      20 |
 +-------------------------------+-----------+----------------------+-----------------------+-----------------------+-----------+---------+


The above result formatted in L<Benchmark.pm|Benchmark> style:

                                    Rate  Text::UnicodeBox::Table  Text::Table::Manifold  Text::ANSITable  Text::MarkdownTable  Text::Table::TinyColorWide  Text::Table::TinyWide  Text::Table::More  Text::Table  Text::Table::Tiny  Text::ASCIITable  Text::Table::TinyColor  Text::FormatTable  Text::SimpleTable  Text::Table::Any  Text::Table::TinyBorderStyle  Text::TabularDisplay  Text::Table::Org  Text::Table::HTML  Text::Table::HTML::DataTables  Text::Table::Sprintf  perl -e1 (baseline)  Text::Table::CSV 
  Text::UnicodeBox::Table          5.3/s                       --                   -42%             -74%                 -75%                        -78%                   -81%               -85%         -85%               -88%              -89%                    -89%               -91%               -93%              -94%                          -94%                  -94%              -94%               -94%                           -94%                  -95%                 -95%              -95% 
  Text::Table::Manifold            9.1/s                      72%                     --             -56%                 -58%                        -63%                   -67%               -74%         -74%               -80%              -81%                    -81%               -84%               -89%              -90%                          -90%                  -90%              -90%               -90%                           -90%                  -91%                 -91%              -92% 
  Text::ANSITable                 20.8/s                     295%                   129%               --                  -4%                        -16%                   -25%               -41%         -41%               -56%              -58%                    -58%               -64%               -75%              -79%                          -79%                  -79%              -79%               -79%                           -79%                  -81%                 -81%              -81% 
  Text::MarkdownTable             21.7/s                     313%                   139%               4%                   --                        -13%                   -21%               -39%         -39%               -54%              -56%                    -56%               -63%               -73%              -78%                          -78%                  -78%              -78%               -78%                           -78%                  -80%                 -80%              -81% 
  Text::Table::TinyColorWide      25.0/s                     375%                   175%              19%                  14%                          --                    -9%               -30%         -30%               -47%              -50%                    -50%               -57%               -70%              -75%                          -75%                  -75%              -75%               -75%                           -75%                  -77%                 -77%              -78% 
  Text::Table::TinyWide           27.8/s                     427%                   205%              33%                  27%                         11%                     --               -22%         -22%               -41%              -44%                    -44%               -52%               -66%              -72%                          -72%                  -72%              -72%               -72%                           -72%                  -74%                 -75%              -75% 
  Text::Table::More               35.7/s                     578%                   292%              71%                  64%                         42%                    28%                 --           0%               -25%              -28%                    -28%               -39%               -57%              -64%                          -64%                  -64%              -64%               -64%                           -64%                  -67%                 -67%              -68% 
  Text::Table                     35.7/s                     578%                   292%              71%                  64%                         42%                    28%                 0%           --               -25%              -28%                    -28%               -39%               -57%              -64%                          -64%                  -64%              -64%               -64%                           -64%                  -67%                 -67%              -68% 
  Text::Table::Tiny               47.6/s                     804%                   423%             128%                 119%                         90%                    71%                33%          33%                 --               -4%                     -4%               -19%               -42%              -52%                          -52%                  -52%              -52%               -52%                           -52%                  -56%                 -57%              -58% 
  Text::ASCIITable                50.0/s                     850%                   450%             140%                 129%                        100%                    80%                39%          39%                 5%                --                      0%               -15%               -40%              -50%                          -50%                  -50%              -50%               -50%                           -50%                  -54%                 -55%              -56% 
  Text::Table::TinyColor          50.0/s                     850%                   450%             140%                 129%                        100%                    80%                39%          39%                 5%                0%                      --               -15%               -40%              -50%                          -50%                  -50%              -50%               -50%                           -50%                  -54%                 -55%              -56% 
  Text::FormatTable               58.8/s                    1017%                   547%             182%                 170%                        135%                   111%                64%          64%                23%               17%                     17%                 --               -29%              -41%                          -41%                  -41%              -41%               -41%                           -41%                  -46%                 -47%              -48% 
  Text::SimpleTable               83.3/s                    1483%                   816%             300%                 283%                        233%                   200%               133%         133%                75%               66%                     66%                41%                 --              -16%                          -16%                  -16%              -16%               -16%                           -16%                  -24%                 -25%              -27% 
  Text::Table::Any               100.0/s                    1800%                  1000%             380%                 359%                        300%                   260%               179%         179%               110%              100%                    100%                70%                19%                --                            0%                    0%                0%                 0%                             0%                   -9%                  -9%              -13% 
  Text::Table::TinyBorderStyle   100.0/s                    1800%                  1000%             380%                 359%                        300%                   260%               179%         179%               110%              100%                    100%                70%                19%                0%                            --                    0%                0%                 0%                             0%                   -9%                  -9%              -13% 
  Text::TabularDisplay           100.0/s                    1800%                  1000%             380%                 359%                        300%                   260%               179%         179%               110%              100%                    100%                70%                19%                0%                            0%                    --                0%                 0%                             0%                   -9%                  -9%              -13% 
  Text::Table::Org               100.0/s                    1800%                  1000%             380%                 359%                        300%                   260%               179%         179%               110%              100%                    100%                70%                19%                0%                            0%                    0%                --                 0%                             0%                   -9%                  -9%              -13% 
  Text::Table::HTML              100.0/s                    1800%                  1000%             380%                 359%                        300%                   260%               179%         179%               110%              100%                    100%                70%                19%                0%                            0%                    0%                0%                 --                             0%                   -9%                  -9%              -13% 
  Text::Table::HTML::DataTables  100.0/s                    1800%                  1000%             380%                 359%                        300%                   260%               179%         179%               110%              100%                    100%                70%                19%                0%                            0%                    0%                0%                 0%                             --                   -9%                  -9%              -13% 
  Text::Table::Sprintf           109.9/s                    1987%                  1108%             427%                 405%                        339%                   295%               207%         207%               130%              119%                    119%                86%                31%                9%                            9%                    9%                9%                 9%                             9%                    --                  -1%               -4% 
  perl -e1 (baseline)            111.1/s                    2011%                  1122%             433%                 411%                        344%                   300%               211%         211%               133%              122%                    122%                88%                33%               11%                           11%                   11%               11%                11%                            11%                    1%                   --               -3% 
  Text::Table::CSV               114.9/s                    2083%                  1164%             451%                 428%                        359%                   313%               221%         221%               141%              129%                    129%                95%                37%               14%                           14%                   14%               14%                14%                            14%                    4%                   3%                -- 
 
 Legends:
   Text::ANSITable: mod_overhead_time=39 participant=Text::ANSITable
   Text::ASCIITable: mod_overhead_time=11 participant=Text::ASCIITable
   Text::FormatTable: mod_overhead_time=8 participant=Text::FormatTable
   Text::MarkdownTable: mod_overhead_time=37 participant=Text::MarkdownTable
   Text::SimpleTable: mod_overhead_time=3 participant=Text::SimpleTable
   Text::Table: mod_overhead_time=19 participant=Text::Table
   Text::Table::Any: mod_overhead_time=1 participant=Text::Table::Any
   Text::Table::CSV: mod_overhead_time=-0.300000000000001 participant=Text::Table::CSV
   Text::Table::HTML: mod_overhead_time=1 participant=Text::Table::HTML
   Text::Table::HTML::DataTables: mod_overhead_time=1 participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: mod_overhead_time=101 participant=Text::Table::Manifold
   Text::Table::More: mod_overhead_time=19 participant=Text::Table::More
   Text::Table::Org: mod_overhead_time=1 participant=Text::Table::Org
   Text::Table::Sprintf: mod_overhead_time=0.0999999999999996 participant=Text::Table::Sprintf
   Text::Table::Tiny: mod_overhead_time=12 participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: mod_overhead_time=1 participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: mod_overhead_time=11 participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: mod_overhead_time=31 participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: mod_overhead_time=27 participant=Text::Table::TinyWide
   Text::TabularDisplay: mod_overhead_time=1 participant=Text::TabularDisplay
   Text::UnicodeBox::Table: mod_overhead_time=181 participant=Text::UnicodeBox::Table
   perl -e1 (baseline): mod_overhead_time=0 participant=perl -e1 (baseline)

The above result presented as chart:

=begin html

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

=end html


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.38.0/lib/site_perl/5.38.0/auto/share/dist/Text-Table-HTML-DataTables/datatables-1.10.22/datatables.css">
 <script src="file:///home/u1/perl5/perlbrew/perls/perl-5.38.0/lib/site_perl/5.38.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.38.0/lib/site_perl/5.38.0/auto/share/dist/Text-Table-HTML-DataTables/datatables-1.10.22/datatables.js"></script>
 <script>var dt_opts = {"buttons":["colvis","print"],"dom":"lQfrtip"}; $(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

Related lists: L<Acme::CPANModules::HTMLTable>,
L<Acme::CPANModules::BrowsingTableInteractively>.

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
