package Acme::CPANModules::TextTable;

our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2021-07-31'; # DATE
our $DIST = 'Acme-CPANModules-TextTable'; # DIST
our $VERSION = '0.013'; # VERSION

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

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

our $LIST = {
    summary => 'Modules that generate text tables',
    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::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 => "fast",
                wide_char_data => 0,
            },
        },
        {
            module => 'Text::Table::TinyColor',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::TinyColor::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 0,
                color_data =>  1,
                box_char => 0,
                multiline_data => 0,
            },
        },
        {
            module => 'Text::Table::TinyColorWide',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::TinyColorWide::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  1,
                box_char => 0,
                multiline_data => 0,
            },
        },
        {
            module => 'Text::Table::TinyWide',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::TinyWide::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  0,
                box_char => 0,
            },
        },
        {
            module => 'Text::Table::Org',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::Org::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 0,
                color_data =>  0,
                box_char => 0,
                multiline_data => 0,
            },
        },
        {
            module => 'Text::Table::CSV',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::CSV::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  0,
                box_char => {value=>undef, summary=>"Irrelevant"},
                multiline_data => {value=>1, summary=>"But make sure your CSV parser can handle multiline cell"},
            },
        },
        {
            module => 'Text::Table::HTML',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::HTML::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  {value=>0, summary=>'Not converted to HTML color elements'},
                box_char => 0,
                multiline_data => 1,
            },
        },
        {
            module => 'Text::Table::HTML::DataTables',
            bench_code => sub {
                my ($table) = @_;
                Text::Table::HTML::DataTables::table(rows=>$table, header_row=>1);
            },
            features => {
                wide_char_data => 1,
                color_data =>  {value=>0, summary=>'Not converted to HTML color elements'},
                box_char => 0,
                multiline_data => 1,
            },
        },
        {
            module => 'Text::TabularDisplay',
            bench_code => sub {
                my ($table) = @_;
                my $t = Text::TabularDisplay->new(@{ $table->[0] });
                $t->add(@{ $table->[$_] }) for 1..@$table-1;
                $t->render; # doesn't add newline
            },
            features => {
                wide_char_data => 1,
                color_data =>  0,
                box_char => {value=>undef, summary=>"Irrelevant"},
                multiline_data => 1,
            },
        },
    ],

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

};

1;
# ABSTRACT: Modules that generate text tables

__END__

=pod

=encoding UTF-8

=head1 NAME

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

=head1 VERSION

This document describes version 0.013 of Acme::CPANModules::TextTable (from Perl distribution Acme-CPANModules-TextTable), released on 2021-07-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 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::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::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 *23)           | 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 *24)             | 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 *25)     | 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       | 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 *26)     | no             | N/A             | N/A         | N/A               | N/A              | yes *27)            | 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 *28)        | 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 *28)        | 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 *26)     | 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. But this module can pass rendering to other module like Text::UnicodeBox::Table

=item 24. Newlines stripped

=item 25. Does not draw borders

=item 26. Irrelevant

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

=item 28. 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.104

L<Text::UnicodeBox::Table>

L<Text::Table::Manifold> 1.03

L<Text::ANSITable> 0.602

L<Text::ASCIITable> 0.22

L<Text::FormatTable> 1.03

L<Text::MarkdownTable> 0.3.1

L<Text::Table> 1.134

L<Text::Table::Tiny> 1.02

L<Text::Table::TinyBorderStyle> 0.004

L<Text::Table::More> 0.014

L<Text::Table::Sprintf> 0.003

L<Text::Table::TinyColor> 0.002

L<Text::Table::TinyColorWide> 0.001

L<Text::Table::TinyWide> 0.001

L<Text::Table::Org> 0.02

L<Text::Table::CSV> 0.023

L<Text::Table::HTML> 0.004

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

L<Text::TabularDisplay> 1.38

=head1 BENCHMARK PARTICIPANTS

=over

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

L<Text::Table::Any>



=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.34.0 >>, CPU: I<< Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz (4 cores) >>, OS: I<< GNU/Linux LinuxMint version 19 >>, OS kernel: I<< Linux version 5.3.0-68-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       |      1.44 |    696    |                 0.00% |             38063.55% |   0.00046 |      20 |
 | Text::ANSITable               |      3.28 |    305    |               128.30% |             16616.21% |   0.0002  |      20 |
 | Text::Table::More             |      6.66 |    150    |               363.51% |              8133.67% |   0.00014 |      20 |
 | Text::ASCIITable              |     15    |     66    |               947.67% |              3542.72% | 7.8e-05   |      20 |
 | Text::Table::TinyColorWide    |     22.1  |     45.2  |              1439.32% |              2379.25% |   2e-05   |      20 |
 | Text::FormatTable             |     22.8  |     43.9  |              1483.83% |              2309.58% | 3.2e-05   |      20 |
 | Text::Table::TinyWide         |     31.2  |     32    |              2072.28% |              1656.84% | 1.1e-05   |      20 |
 | Text::Table::Manifold         |     49    |     20    |              3318.43% |              1016.41% | 2.4e-05   |      20 |
 | Text::Table::Tiny             |     53    |     19    |              3583.64% |               936.03% | 3.4e-05   |      20 |
 | Text::TabularDisplay          |     58.7  |     17    |              3985.42% |               834.14% | 5.6e-06   |      20 |
 | Text::Table::TinyColor        |     78.8  |     12.7  |              5379.60% |               596.47% | 1.2e-05   |      20 |
 | Text::Table::HTML             |     79    |     13    |              5390.03% |               595.14% | 2.7e-05   |      20 |
 | Text::MarkdownTable           |    114    |      8.76 |              7844.02% |               380.41% | 4.7e-06   |      20 |
 | Text::Table                   |    140    |      7    |              9907.76% |               281.34% | 9.6e-06   |      20 |
 | Text::Table::HTML::DataTables |    165    |      6.05 |             11398.27% |               231.91% | 3.4e-06   |      20 |
 | Text::Table::CSV              |    283    |      3.54 |             19572.73% |                93.99% |   2e-06   |      20 |
 | Text::Table::Org              |    299    |      3.34 |             20702.20% |                83.46% | 9.1e-07   |      20 |
 | Text::Table::TinyBorderStyle  |    331    |      3.02 |             22934.08% |                65.68% | 1.5e-06   |      20 |
 | Text::Table::Any              |    520    |      1.9  |             35751.62% |                 6.45% | 5.2e-06   |      20 |
 | Text::Table::Sprintf          |    548    |      1.82 |             38063.55% |                 0.00% | 1.6e-06   |      23 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

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::Table::Manifold  Text::Table::Tiny  Text::TabularDisplay  Text::Table::HTML  Text::Table::TinyColor  Text::MarkdownTable  Text::Table  Text::Table::HTML::DataTables  Text::Table::CSV  Text::Table::Org  Text::Table::TinyBorderStyle  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table        1.44/s                       --             -56%               -78%              -90%                        -93%               -93%                   -95%                   -97%               -97%                  -97%               -98%                    -98%                 -98%         -98%                           -99%              -99%              -99%                          -99%              -99%                  -99% 
  Text::ANSITable                3.28/s                     128%               --               -50%              -78%                        -85%               -85%                   -89%                   -93%               -93%                  -94%               -95%                    -95%                 -97%         -97%                           -98%              -98%              -98%                          -99%              -99%                  -99% 
  Text::Table::More              6.66/s                     363%             103%                 --              -56%                        -69%               -70%                   -78%                   -86%               -87%                  -88%               -91%                    -91%                 -94%         -95%                           -95%              -97%              -97%                          -97%              -98%                  -98% 
  Text::ASCIITable                 15/s                     954%             362%               127%                --                        -31%               -33%                   -51%                   -69%               -71%                  -74%               -80%                    -80%                 -86%         -89%                           -90%              -94%              -94%                          -95%              -97%                  -97% 
  Text::Table::TinyColorWide     22.1/s                    1439%             574%               231%               46%                          --                -2%                   -29%                   -55%               -57%                  -62%               -71%                    -71%                 -80%         -84%                           -86%              -92%              -92%                          -93%              -95%                  -95% 
  Text::FormatTable              22.8/s                    1485%             594%               241%               50%                          2%                 --                   -27%                   -54%               -56%                  -61%               -70%                    -71%                 -80%         -84%                           -86%              -91%              -92%                          -93%              -95%                  -95% 
  Text::Table::TinyWide          31.2/s                    2075%             853%               368%              106%                         41%                37%                     --                   -37%               -40%                  -46%               -59%                    -60%                 -72%         -78%                           -81%              -88%              -89%                          -90%              -94%                  -94% 
  Text::Table::Manifold            49/s                    3379%            1425%               650%              229%                        126%               119%                    60%                     --                -5%                  -15%               -35%                    -36%                 -56%         -65%                           -69%              -82%              -83%                          -84%              -90%                  -90% 
  Text::Table::Tiny                53/s                    3563%            1505%               689%              247%                        137%               131%                    68%                     5%                 --                  -10%               -31%                    -33%                 -53%         -63%                           -68%              -81%              -82%                          -84%              -90%                  -90% 
  Text::TabularDisplay           58.7/s                    3994%            1694%               782%              288%                        165%               158%                    88%                    17%                11%                    --               -23%                    -25%                 -48%         -58%                           -64%              -79%              -80%                          -82%              -88%                  -89% 
  Text::Table::HTML                79/s                    5253%            2246%              1053%              407%                        247%               237%                   146%                    53%                46%                   30%                 --                     -2%                 -32%         -46%                           -53%              -72%              -74%                          -76%              -85%                  -86% 
  Text::Table::TinyColor         78.8/s                    5380%            2301%              1081%              419%                        255%               245%                   151%                    57%                49%                   33%                 2%                      --                 -31%         -44%                           -52%              -72%              -73%                          -76%              -85%                  -85% 
  Text::MarkdownTable             114/s                    7845%            3381%              1612%              653%                        415%               401%                   265%                   128%               116%                   94%                48%                     44%                   --         -20%                           -30%              -59%              -61%                          -65%              -78%                  -79% 
  Text::Table                     140/s                    9842%            4257%              2042%              842%                        545%               527%                   357%                   185%               171%                  142%                85%                     81%                  25%           --                           -13%              -49%              -52%                          -56%              -72%                  -74% 
  Text::Table::HTML::DataTables   165/s                   11404%            4941%              2379%              990%                        647%               625%                   428%                   230%               214%                  180%               114%                    109%                  44%          15%                             --              -41%              -44%                          -50%              -68%                  -69% 
  Text::Table::CSV                283/s                   19561%            8515%              4137%             1764%                       1176%              1140%                   803%                   464%               436%                  380%               267%                    258%                 147%          97%                            70%                --               -5%                          -14%              -46%                  -48% 
  Text::Table::Org                299/s                   20738%            9031%              4391%             1876%                       1253%              1214%                   858%                   498%               468%                  408%               289%                    280%                 162%         109%                            81%                5%                --                           -9%              -43%                  -45% 
  Text::Table::TinyBorderStyle    331/s                   22946%            9999%              4866%             2085%                       1396%              1353%                   959%                   562%               529%                  462%               330%                    320%                 190%         131%                           100%               17%               10%                            --              -37%                  -39% 
  Text::Table::Any                520/s                   36531%           15952%              7794%             3373%                       2278%              2210%                  1584%                   952%               900%                  794%               584%                    568%                 361%         268%                           218%               86%               75%                           58%                --                   -4% 
  Text::Table::Sprintf            548/s                   38141%           16658%              8141%             3526%                       2383%              2312%                  1658%                   998%               943%                  834%               614%                    597%                 381%         284%                           232%               94%               83%                           65%                4%                    -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   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       |      11.3 |    88.4   |                 0.00% |             34905.68% | 8.5e-05 |      21 |
 | Text::ANSITable               |      30   |    33     |               164.51% |             13134.31% |   4e-05 |      20 |
 | Text::Table::More             |      61.7 |    16.2   |               445.13% |              6321.58% | 1.6e-05 |      20 |
 | Text::ASCIITable              |     162   |     6.17  |              1331.88% |              2344.74% | 3.4e-06 |      20 |
 | Text::FormatTable             |     200   |     5     |              1671.23% |              1876.35% | 7.1e-06 |      20 |
 | Text::Table::TinyColorWide    |     217   |     4.61  |              1817.34% |              1725.74% | 2.4e-06 |      21 |
 | Text::Table::TinyWide         |     304   |     3.29  |              2587.30% |              1202.63% | 1.3e-06 |      20 |
 | Text::TabularDisplay          |     431   |     2.32  |              3708.00% |               819.27% | 2.2e-06 |      20 |
 | Text::Table::Manifold         |     439   |     2.28  |              3780.76% |               802.03% | 1.1e-06 |      20 |
 | Text::Table::Tiny             |     477   |     2.1   |              4112.27% |               731.04% | 1.3e-06 |      22 |
 | Text::MarkdownTable           |     540   |     1.85  |              4671.83% |               633.59% | 1.1e-06 |      20 |
 | Text::Table                   |     646   |     1.55  |              5605.53% |               513.54% | 7.5e-07 |      20 |
 | Text::Table::TinyColor        |     735   |     1.36  |              6390.04% |               439.38% | 4.8e-07 |      20 |
 | Text::Table::HTML             |     743   |     1.35  |              6463.79% |               433.32% | 1.1e-06 |      21 |
 | Text::Table::HTML::DataTables |    1300   |     0.79  |             11078.51% |               213.15% | 8.3e-07 |      21 |
 | Text::Table::Org              |    2170   |     0.461 |             19065.87% |                82.65% | 2.1e-07 |      20 |
 | Text::Table::CSV              |    2170   |     0.46  |             19094.61% |                82.37% | 2.1e-07 |      21 |
 | Text::Table::TinyBorderStyle  |    2210   |     0.452 |             19451.10% |                79.05% | 2.1e-07 |      20 |
 | Text::Table::Any              |    3810   |     0.262 |             33567.68% |                 3.97% | 1.9e-07 |      26 |
 | Text::Table::Sprintf          |    3960   |     0.252 |             34905.68% |                 0.00% | 2.1e-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::TabularDisplay  Text::Table::Manifold  Text::Table::Tiny  Text::MarkdownTable  Text::Table  Text::Table::TinyColor  Text::Table::HTML  Text::Table::HTML::DataTables  Text::Table::Org  Text::Table::CSV  Text::Table::TinyBorderStyle  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table        11.3/s                       --             -62%               -81%              -93%               -94%                        -94%                   -96%                  -97%                   -97%               -97%                 -97%         -98%                    -98%               -98%                           -99%              -99%              -99%                          -99%              -99%                  -99% 
  Text::ANSITable                  30/s                     167%               --               -50%              -81%               -84%                        -86%                   -90%                  -92%                   -93%               -93%                 -94%         -95%                    -95%               -95%                           -97%              -98%              -98%                          -98%              -99%                  -99% 
  Text::Table::More              61.7/s                     445%             103%                 --              -61%               -69%                        -71%                   -79%                  -85%                   -85%               -87%                 -88%         -90%                    -91%               -91%                           -95%              -97%              -97%                          -97%              -98%                  -98% 
  Text::ASCIITable                162/s                    1332%             434%               162%                --               -18%                        -25%                   -46%                  -62%                   -63%               -65%                 -70%         -74%                    -77%               -78%                           -87%              -92%              -92%                          -92%              -95%                  -95% 
  Text::FormatTable               200/s                    1668%             560%               223%               23%                 --                         -7%                   -34%                  -53%                   -54%               -57%                 -63%         -69%                    -72%               -73%                           -84%              -90%              -90%                          -90%              -94%                  -94% 
  Text::Table::TinyColorWide      217/s                    1817%             615%               251%               33%                 8%                          --                   -28%                  -49%                   -50%               -54%                 -59%         -66%                    -70%               -70%                           -82%              -90%              -90%                          -90%              -94%                  -94% 
  Text::Table::TinyWide           304/s                    2586%             903%               392%               87%                51%                         40%                     --                  -29%                   -30%               -36%                 -43%         -52%                    -58%               -58%                           -75%              -85%              -86%                          -86%              -92%                  -92% 
  Text::TabularDisplay            431/s                    3710%            1322%               598%              165%               115%                         98%                    41%                    --                    -1%                -9%                 -20%         -33%                    -41%               -41%                           -65%              -80%              -80%                          -80%              -88%                  -89% 
  Text::Table::Manifold           439/s                    3777%            1347%               610%              170%               119%                        102%                    44%                    1%                     --                -7%                 -18%         -32%                    -40%               -40%                           -65%              -79%              -79%                          -80%              -88%                  -88% 
  Text::Table::Tiny               477/s                    4109%            1471%               671%              193%               138%                        119%                    56%                   10%                     8%                 --                 -11%         -26%                    -35%               -35%                           -62%              -78%              -78%                          -78%              -87%                  -88% 
  Text::MarkdownTable             540/s                    4678%            1683%               775%              233%               170%                        149%                    77%                   25%                    23%                13%                   --         -16%                    -26%               -27%                           -57%              -75%              -75%                          -75%              -85%                  -86% 
  Text::Table                     646/s                    5603%            2029%               945%              298%               222%                        197%                   112%                   49%                    47%                35%                  19%           --                    -12%               -12%                           -49%              -70%              -70%                          -70%              -83%                  -83% 
  Text::Table::TinyColor          735/s                    6400%            2326%              1091%              353%               267%                        238%                   141%                   70%                    67%                54%                  36%          13%                      --                 0%                           -41%              -66%              -66%                          -66%              -80%                  -81% 
  Text::Table::HTML               743/s                    6448%            2344%              1099%              357%               270%                        241%                   143%                   71%                    68%                55%                  37%          14%                      0%                 --                           -41%              -65%              -65%                          -66%              -80%                  -81% 
  Text::Table::HTML::DataTables  1300/s                   11089%            4077%              1950%              681%               532%                        483%                   316%                  193%                   188%               165%                 134%          96%                     72%                70%                             --              -41%              -41%                          -42%              -66%                  -68% 
  Text::Table::Org               2170/s                   19075%            7058%              3414%             1238%               984%                        900%                   613%                  403%                   394%               355%                 301%         236%                    195%               192%                            71%                --                0%                           -1%              -43%                  -45% 
  Text::Table::CSV               2170/s                   19117%            7073%              3421%             1241%               986%                        902%                   615%                  404%                   395%               356%                 302%         236%                    195%               193%                            71%                0%                --                           -1%              -43%                  -45% 
  Text::Table::TinyBorderStyle   2210/s                   19457%            7200%              3484%             1265%              1006%                        919%                   627%                  413%                   404%               364%                 309%         242%                    200%               198%                            74%                1%                1%                            --              -42%                  -44% 
  Text::Table::Any               3810/s                   33640%           12495%              6083%             2254%              1808%                       1659%                  1155%                  785%                   770%               701%                 606%         491%                    419%               415%                           201%               75%               75%                           72%                --                   -3% 
  Text::Table::Sprintf           3960/s                   34979%           12995%              6328%             2348%              1884%                       1729%                  1205%                  820%                   804%               733%                 634%         515%                    439%               435%                           213%               82%               82%                           79%                3%                    -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   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       |     300   | 4         |                 0.00% |             46360.22% | 4.6e-05 |      20 |
 | Text::ANSITable               |    1120   | 0.89      |               332.32% |             10646.84% | 2.7e-07 |      20 |
 | Text::Table::More             |    2500   | 0.4       |               854.89% |              4765.52% | 4.3e-07 |      20 |
 | Text::ASCIITable              |    6100   | 0.16      |              2256.09% |              1871.92% | 2.1e-07 |      20 |
 | Text::FormatTable             |    8680   | 0.115     |              3238.29% |              1291.74% | 5.3e-08 |      20 |
 | Text::Table::Manifold         |    9500   | 0.11      |              3561.69% |              1168.82% | 1.6e-07 |      20 |
 | Text::Table                   |    9600   | 0.1       |              3588.47% |              1159.61% | 2.1e-07 |      20 |
 | Text::Table::TinyColorWide    |    9930   | 0.101     |              3721.66% |              1115.71% | 9.9e-08 |      23 |
 | Text::Table::TinyWide         |   14000   | 0.0715    |              5280.40% |               763.51% | 2.7e-08 |      20 |
 | Text::Table::TinyBorderStyle  |   14600   | 0.0683    |              5531.98% |               724.94% | 2.7e-08 |      20 |
 | Text::MarkdownTable           |   16000   | 0.064     |              5901.06% |               674.20% | 1.1e-07 |      20 |
 | Text::Table::HTML::DataTables |   18000   | 0.055     |              6884.01% |               565.24% | 8.3e-08 |      33 |
 | Text::Table::Tiny             |   18408.4 | 0.0543232 |              6983.55% |               555.89% |   0     |      20 |
 | Text::TabularDisplay          |   18900   | 0.0529    |              7177.45% |               538.41% | 2.5e-08 |      22 |
 | Text::Table::TinyColor        |   29300   | 0.0341    |             11168.24% |               312.31% | 1.3e-08 |      22 |
 | Text::Table::HTML             |   38400   | 0.026     |             14681.96% |               214.30% | 1.3e-08 |      20 |
 | Text::Table::Org              |   68200   | 0.0147    |             26145.72% |                77.02% | 6.1e-09 |      24 |
 | Text::Table::CSV              |   95800   | 0.0104    |             36764.56% |                26.03% | 8.6e-09 |      27 |
 | Text::Table::Any              |  108000   | 0.00928   |             41362.43% |                12.05% | 2.9e-09 |      26 |
 | Text::Table::Sprintf          |  121000   | 0.00828   |             46360.22% |                 0.00% | 2.6e-09 |      32 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+

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::Manifold  Text::Table::TinyColorWide  Text::Table  Text::Table::TinyWide  Text::Table::TinyBorderStyle  Text::MarkdownTable  Text::Table::HTML::DataTables  Text::Table::Tiny  Text::TabularDisplay  Text::Table::TinyColor  Text::Table::HTML  Text::Table::Org  Text::Table::CSV  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table            300/s                       --             -77%               -90%              -96%               -97%                   -97%                        -97%         -97%                   -98%                          -98%                 -98%                           -98%               -98%                  -98%                    -99%               -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                   1120/s                     349%               --               -55%              -82%               -87%                   -87%                        -88%         -88%                   -91%                          -92%                 -92%                           -93%               -93%                  -94%                    -96%               -97%              -98%              -98%              -98%                  -99% 
  Text::Table::More                 2500/s                     900%             122%                 --              -60%               -71%                   -72%                        -74%         -75%                   -82%                          -82%                 -84%                           -86%               -86%                  -86%                    -91%               -93%              -96%              -97%              -97%                  -97% 
  Text::ASCIITable                  6100/s                    2400%             456%               150%                --               -28%                   -31%                        -36%         -37%                   -55%                          -57%                 -60%                           -65%               -66%                  -66%                    -78%               -83%              -90%              -93%              -94%                  -94% 
  Text::FormatTable                 8680/s                    3378%             673%               247%               39%                 --                    -4%                        -12%         -13%                   -37%                          -40%                 -44%                           -52%               -52%                  -54%                    -70%               -77%              -87%              -90%              -91%                  -92% 
  Text::Table::Manifold             9500/s                    3536%             709%               263%               45%                 4%                     --                         -8%          -9%                   -35%                          -37%                 -41%                           -50%               -50%                  -51%                    -69%               -76%              -86%              -90%              -91%                  -92% 
  Text::Table::TinyColorWide        9930/s                    3860%             781%               296%               58%                13%                     8%                          --           0%                   -29%                          -32%                 -36%                           -45%               -46%                  -47%                    -66%               -74%              -85%              -89%              -90%                  -91% 
  Text::Table                       9600/s                    3900%             790%               300%               59%                14%                     9%                          1%           --                   -28%                          -31%                 -36%                           -45%               -45%                  -47%                    -65%               -74%              -85%              -89%              -90%                  -91% 
  Text::Table::TinyWide            14000/s                    5494%            1144%               459%              123%                60%                    53%                         41%          39%                     --                           -4%                 -10%                           -23%               -24%                  -26%                    -52%               -63%              -79%              -85%              -87%                  -88% 
  Text::Table::TinyBorderStyle     14600/s                    5756%            1203%               485%              134%                68%                    61%                         47%          46%                     4%                            --                  -6%                           -19%               -20%                  -22%                    -50%               -61%              -78%              -84%              -86%                  -87% 
  Text::MarkdownTable              16000/s                    6150%            1290%               525%              150%                79%                    71%                         57%          56%                    11%                            6%                   --                           -14%               -15%                  -17%                    -46%               -59%              -77%              -83%              -85%                  -87% 
  Text::Table::HTML::DataTables    18000/s                    7172%            1518%               627%              190%               109%                   100%                         83%          81%                    29%                           24%                  16%                             --                -1%                   -3%                    -38%               -52%              -73%              -81%              -83%                  -84% 
  Text::Table::Tiny              18408.4/s                    7263%            1538%               636%              194%               111%                   102%                         85%          84%                    31%                           25%                  17%                             1%                 --                   -2%                    -37%               -52%              -72%              -80%              -82%                  -84% 
  Text::TabularDisplay             18900/s                    7461%            1582%               656%              202%               117%                   107%                         90%          89%                    35%                           29%                  20%                             3%                 2%                    --                    -35%               -50%              -72%              -80%              -82%                  -84% 
  Text::Table::TinyColor           29300/s                   11630%            2509%              1073%              369%               237%                   222%                        196%         193%                   109%                          100%                  87%                            61%                59%                   55%                      --               -23%              -56%              -69%              -72%                  -75% 
  Text::Table::HTML                38400/s                   15284%            3323%              1438%              515%               342%                   323%                        288%         284%                   175%                          162%                 146%                           111%               108%                  103%                     31%                 --              -43%              -60%              -64%                  -68% 
  Text::Table::Org                 68200/s                   27110%            5954%              2621%              988%               682%                   648%                        587%         580%                   386%                          364%                 335%                           274%               269%                  259%                    131%                76%                --              -29%              -36%                  -43% 
  Text::Table::CSV                 95800/s                   38361%            8457%              3746%             1438%              1005%                   957%                        871%         861%                   587%                          556%                 515%                           428%               422%                  408%                    227%               150%               41%                --              -10%                  -20% 
  Text::Table::Any                108000/s                   43003%            9490%              4210%             1624%              1139%                  1085%                        988%         977%                   670%                          635%                 589%                           492%               485%                  470%                    267%               180%               58%               12%                --                  -10% 
  Text::Table::Sprintf            121000/s                   48209%           10648%              4730%             1832%              1288%                  1228%                       1119%        1107%                   763%                          724%                 672%                           564%               556%                  538%                    311%               214%               77%               25%               12%                    -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   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       |       600 | 2          |                 0.00% |             61075.10% | 6.5e-05 |      20 |
 | Text::ANSITable               |      4020 | 0.249      |               586.14% |              8815.88% | 2.1e-07 |      21 |
 | Text::Table::More             |      9500 | 0.11       |              1524.04% |              3666.85% | 2.7e-07 |      20 |
 | Text::Table::Manifold         |     16000 | 0.062      |              2650.29% |              2124.32% | 1.2e-07 |      25 |
 | Text::Table::TinyBorderStyle  |     19000 | 0.052      |              3155.00% |              1779.42% | 1.2e-07 |      25 |
 | Text::ASCIITable              |     21000 | 0.047      |              3555.71% |              1573.41% | 5.3e-08 |      20 |
 | Text::Table::HTML::DataTables |     25000 | 0.04       |              4152.36% |              1338.61% | 9.5e-08 |      25 |
 | Text::Table                   |     26000 | 0.039      |              4295.16% |              1291.87% | 5.3e-08 |      20 |
 | Text::MarkdownTable           |     31000 | 0.033      |              5151.57% |              1064.89% | 5.3e-08 |      20 |
 | Text::FormatTable             |     43000 | 0.023      |              7228.34% |               734.77% | 2.7e-08 |      30 |
 | Text::Table::TinyColorWide    |     59000 | 0.017      |              9966.01% |               507.74% | 2.7e-08 |      20 |
 | Text::Table::Tiny             |     65800 | 0.0152     |             11142.60% |               444.14% | 5.8e-09 |      26 |
 | Text::Table::TinyWide         |     75800 | 0.0132     |             12842.13% |               372.68% | 6.7e-09 |      20 |
 | Text::TabularDisplay          |     76700 | 0.013      |             12990.18% |               367.34% | 6.5e-09 |      21 |
 | Text::Table::TinyColor        |    115103 | 0.00868789 |             19555.45% |               211.24% |   0     |      23 |
 | Text::Table::HTML             |    180000 | 0.0056     |             30532.11% |                99.71% | 6.7e-09 |      20 |
 | Text::Table::Org              |    180000 | 0.0054     |             31396.78% |                94.23% | 6.7e-09 |      20 |
 | Text::Table::Any              |    258245 | 0.00387228 |             43999.10% |                38.72% |   0     |      20 |
 | Text::Table::Sprintf          |    352000 | 0.00284    |             60033.82% |                 1.73% | 7.8e-10 |      23 |
 | Text::Table::CSV              |    358000 | 0.00279    |             61075.10% |                 0.00% | 8.3e-10 |      20 |
 +-------------------------------+-----------+------------+-----------------------+-----------------------+---------+---------+

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

                                     Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::Table::Manifold  Text::Table::TinyBorderStyle  Text::ASCIITable  Text::Table::HTML::DataTables  Text::Table  Text::MarkdownTable  Text::FormatTable  Text::Table::TinyColorWide  Text::Table::Tiny  Text::Table::TinyWide  Text::TabularDisplay  Text::Table::TinyColor  Text::Table::HTML  Text::Table::Org  Text::Table::Any  Text::Table::Sprintf  Text::Table::CSV 
  Text::UnicodeBox::Table           600/s                       --             -87%               -94%                   -96%                          -97%              -97%                           -98%         -98%                 -98%               -98%                        -99%               -99%                   -99%                  -99%                    -99%               -99%              -99%              -99%                  -99%              -99% 
  Text::ANSITable                  4020/s                     703%               --               -55%                   -75%                          -79%              -81%                           -83%         -84%                 -86%               -90%                        -93%               -93%                   -94%                  -94%                    -96%               -97%              -97%              -98%                  -98%              -98% 
  Text::Table::More                9500/s                    1718%             126%                 --                   -43%                          -52%              -57%                           -63%         -64%                 -70%               -79%                        -84%               -86%                   -88%                  -88%                    -92%               -94%              -95%              -96%                  -97%              -97% 
  Text::Table::Manifold           16000/s                    3125%             301%                77%                     --                          -16%              -24%                           -35%         -37%                 -46%               -62%                        -72%               -75%                   -78%                  -79%                    -85%               -90%              -91%              -93%                  -95%              -95% 
  Text::Table::TinyBorderStyle    19000/s                    3746%             378%               111%                    19%                            --               -9%                           -23%         -25%                 -36%               -55%                        -67%               -70%                   -74%                  -75%                    -83%               -89%              -89%              -92%                  -94%              -94% 
  Text::ASCIITable                21000/s                    4155%             429%               134%                    31%                           10%                --                           -14%         -17%                 -29%               -51%                        -63%               -67%                   -71%                  -72%                    -81%               -88%              -88%              -91%                  -93%              -94% 
  Text::Table::HTML::DataTables   25000/s                    4900%             522%               175%                    55%                           29%               17%                             --          -2%                 -17%               -42%                        -57%               -62%                   -67%                  -67%                    -78%               -86%              -86%              -90%                  -92%              -93% 
  Text::Table                     26000/s                    5028%             538%               182%                    58%                           33%               20%                             2%           --                 -15%               -41%                        -56%               -61%                   -66%                  -66%                    -77%               -85%              -86%              -90%                  -92%              -92% 
  Text::MarkdownTable             31000/s                    5960%             654%               233%                    87%                           57%               42%                            21%          18%                   --               -30%                        -48%               -53%                   -60%                  -60%                    -73%               -83%              -83%              -88%                  -91%              -91% 
  Text::FormatTable               43000/s                    8595%             982%               378%                   169%                          126%              104%                            73%          69%                  43%                 --                        -26%               -33%                   -42%                  -43%                    -62%               -75%              -76%              -83%                  -87%              -87% 
  Text::Table::TinyColorWide      59000/s                   11664%            1364%               547%                   264%                          205%              176%                           135%         129%                  94%                35%                          --               -10%                   -22%                  -23%                    -48%               -67%              -68%              -77%                  -83%              -83% 
  Text::Table::Tiny               65800/s                   13057%            1538%               623%                   307%                          242%              209%                           163%         156%                 117%                51%                         11%                 --                   -13%                  -14%                    -42%               -63%              -64%              -74%                  -81%              -81% 
  Text::Table::TinyWide           75800/s                   15051%            1786%               733%                   369%                          293%              256%                           203%         195%                 150%                74%                         28%                15%                     --                   -1%                    -34%               -57%              -59%              -70%                  -78%              -78% 
  Text::TabularDisplay            76700/s                   15284%            1815%               746%                   376%                          300%              261%                           207%         200%                 153%                76%                         30%                16%                     1%                    --                    -33%               -56%              -58%              -70%                  -78%              -78% 
  Text::Table::TinyColor         115103/s                   22920%            2766%              1166%                   613%                          498%              440%                           360%         348%                 279%               164%                         95%                74%                    51%                   49%                      --               -35%              -37%              -55%                  -67%              -67% 
  Text::Table::HTML              180000/s                   35614%            4346%              1864%                  1007%                          828%              739%                           614%         596%                 489%               310%                        203%               171%                   135%                  132%                     55%                 --               -3%              -30%                  -49%              -50% 
  Text::Table::Org               180000/s                   36937%            4511%              1937%                  1048%                          862%              770%                           640%         622%                 511%               325%                        214%               181%                   144%                  140%                     60%                 3%                --              -28%                  -47%              -48% 
  Text::Table::Any               258245/s                   51549%            6330%              2740%                  1501%                         1242%             1113%                           932%         907%                 752%               493%                        339%               292%                   240%                  235%                    124%                44%               39%                --                  -26%              -27% 
  Text::Table::Sprintf           352000/s                   70322%            8667%              3773%                  2083%                         1730%             1554%                          1308%        1273%                1061%               709%                        498%               435%                   364%                  357%                    205%                97%               90%               36%                    --               -1% 
  Text::Table::CSV               358000/s                   71584%            8824%              3842%                  2122%                         1763%             1584%                          1333%        1297%                1082%               724%                        509%               444%                   373%                  365%                    211%               100%               93%               38%                    1%                -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   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       |      53   | 19         |                 0.00% |             35533.33% | 3.7e-05 |      20 |
 | Text::ANSITable               |     143   |  7.01      |               168.54% |             13169.40% | 2.5e-06 |      20 |
 | Text::Table::More             |     320   |  3.2       |               494.57% |              5893.12% | 3.5e-06 |      24 |
 | Text::ASCIITable              |     641   |  1.56      |              1105.52% |              2855.85% | 6.4e-07 |      20 |
 | Text::FormatTable             |     883   |  1.13      |              1561.88% |              2044.16% | 6.9e-07 |      20 |
 | Text::Table::TinyColorWide    |    1100   |  0.909     |              1969.45% |              1621.87% | 2.1e-07 |      20 |
 | Text::Table                   |    1480   |  0.675     |              2688.68% |              1177.78% | 4.3e-07 |      20 |
 | Text::Table::TinyWide         |    1550   |  0.645     |              2816.27% |              1121.88% | 2.7e-07 |      20 |
 | Text::Table::Manifold         |    2040   |  0.49      |              3741.03% |               827.70% | 4.3e-07 |      20 |
 | Text::Table::Tiny             |    2470   |  0.405     |              4541.36% |               667.73% | 2.6e-07 |      21 |
 | Text::TabularDisplay          |    2790   |  0.358     |              5152.33% |               578.43% | 2.1e-07 |      20 |
 | Text::Table::TinyColor        |    3700   |  0.27      |              6856.23% |               412.25% | 4.9e-08 |      24 |
 | Text::Table::TinyBorderStyle  |    4080   |  0.245     |              7571.15% |               364.51% | 2.1e-07 |      20 |
 | Text::MarkdownTable           |    4340   |  0.23      |              8063.82% |               336.48% |   2e-07 |      22 |
 | Text::Table::HTML             |    4780   |  0.209     |              8900.61% |               295.90% | 5.3e-08 |      20 |
 | Text::Table::HTML::DataTables |    6200   |  0.16      |             11553.86% |               205.76% | 2.6e-07 |      21 |
 | Text::Table::Org              |   11000   |  0.09      |             20879.74% |                69.85% | 1.1e-07 |      20 |
 | Text::Table::CSV              |   14356.1 |  0.0696569 |             26910.63% |                31.92% |   0     |      28 |
 | Text::Table::Any              |   16000   |  0.062     |             30132.43% |                17.86% |   1e-07 |      22 |
 | Text::Table::Sprintf          |   18900   |  0.0528    |             35533.33% |                 0.00% | 2.1e-08 |      32 |
 +-------------------------------+-----------+------------+-----------------------+-----------------------+---------+---------+

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  Text::Table::TinyWide  Text::Table::Manifold  Text::Table::Tiny  Text::TabularDisplay  Text::Table::TinyColor  Text::Table::TinyBorderStyle  Text::MarkdownTable  Text::Table::HTML  Text::Table::HTML::DataTables  Text::Table::Org  Text::Table::CSV  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table             53/s                       --             -63%               -83%              -91%               -94%                        -95%         -96%                   -96%                   -97%               -97%                  -98%                    -98%                          -98%                 -98%               -98%                           -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                    143/s                     171%               --               -54%              -77%               -83%                        -87%         -90%                   -90%                   -93%               -94%                  -94%                    -96%                          -96%                 -96%               -97%                           -97%              -98%              -99%              -99%                  -99% 
  Text::Table::More                  320/s                     493%             119%                 --              -51%               -64%                        -71%         -78%                   -79%                   -84%               -87%                  -88%                    -91%                          -92%                 -92%               -93%                           -95%              -97%              -97%              -98%                  -98% 
  Text::ASCIITable                   641/s                    1117%             349%               105%                --               -27%                        -41%         -56%                   -58%                   -68%               -74%                  -77%                    -82%                          -84%                 -85%               -86%                           -89%              -94%              -95%              -96%                  -96% 
  Text::FormatTable                  883/s                    1581%             520%               183%               38%                 --                        -19%         -40%                   -42%                   -56%               -64%                  -68%                    -76%                          -78%                 -79%               -81%                           -85%              -92%              -93%              -94%                  -95% 
  Text::Table::TinyColorWide        1100/s                    1990%             671%               252%               71%                24%                          --         -25%                   -29%                   -46%               -55%                  -60%                    -70%                          -73%                 -74%               -77%                           -82%              -90%              -92%              -93%                  -94% 
  Text::Table                       1480/s                    2714%             938%               374%              131%                67%                         34%           --                    -4%                   -27%               -40%                  -46%                    -60%                          -63%                 -65%               -69%                           -76%              -86%              -89%              -90%                  -92% 
  Text::Table::TinyWide             1550/s                    2845%             986%               396%              141%                75%                         40%           4%                     --                   -24%               -37%                  -44%                    -58%                          -62%                 -64%               -67%                           -75%              -86%              -89%              -90%                  -91% 
  Text::Table::Manifold             2040/s                    3777%            1330%               553%              218%               130%                         85%          37%                    31%                     --               -17%                  -26%                    -44%                          -50%                 -53%               -57%                           -67%              -81%              -85%              -87%                  -89% 
  Text::Table::Tiny                 2470/s                    4591%            1630%               690%              285%               179%                        124%          66%                    59%                    20%                 --                  -11%                    -33%                          -39%                 -43%               -48%                           -60%              -77%              -82%              -84%                  -86% 
  Text::TabularDisplay              2790/s                    5207%            1858%               793%              335%               215%                        153%          88%                    80%                    36%                13%                    --                    -24%                          -31%                 -35%               -41%                           -55%              -74%              -80%              -82%                  -85% 
  Text::Table::TinyColor            3700/s                    6937%            2496%              1085%              477%               318%                        236%         150%                   138%                    81%                50%                   32%                      --                           -9%                 -14%               -22%                           -40%              -66%              -74%              -77%                  -80% 
  Text::Table::TinyBorderStyle      4080/s                    7655%            2761%              1206%              536%               361%                        271%         175%                   163%                   100%                65%                   46%                     10%                            --                  -6%               -14%                           -34%              -63%              -71%              -74%                  -78% 
  Text::MarkdownTable               4340/s                    8160%            2947%              1291%              578%               391%                        295%         193%                   180%                   113%                76%                   55%                     17%                            6%                   --                -9%                           -30%              -60%              -69%              -73%                  -77% 
  Text::Table::HTML                 4780/s                    8990%            3254%              1431%              646%               440%                        334%         222%                   208%                   134%                93%                   71%                     29%                           17%                  10%                 --                           -23%              -56%              -66%              -70%                  -74% 
  Text::Table::HTML::DataTables     6200/s                   11775%            4281%              1900%              875%               606%                        468%         321%                   303%                   206%               153%                  123%                     68%                           53%                  43%                30%                             --              -43%              -56%              -61%                  -67% 
  Text::Table::Org                 11000/s                   21011%            7688%              3455%             1633%              1155%                        910%         650%                   616%                   444%               350%                  297%                    200%                          172%                 155%               132%                            77%                --              -22%              -31%                  -41% 
  Text::Table::CSV               14356.1/s                   27176%            9963%              4493%             2139%              1522%                       1204%         869%                   825%                   603%               481%                  413%                    287%                          251%                 230%               200%                           129%               29%                --              -10%                  -24% 
  Text::Table::Any                 16000/s                   30545%           11206%              5061%             2416%              1722%                       1366%         988%                   940%                   690%               553%                  477%                    335%                          295%                 270%               237%                           158%               45%               12%                --                  -14% 
  Text::Table::Sprintf             18900/s                   35884%           13176%              5960%             2854%              2040%                       1621%        1178%                  1121%                   828%               667%                  578%                    411%                          364%                 335%               295%                           203%               70%               31%               17%                    -- 
 
 Legends:
   Text::ANSITable: participant=Text::ANSITable
   Text::ASCIITable: participant=Text::ASCIITable
   Text::FormatTable: participant=Text::FormatTable
   Text::MarkdownTable: participant=Text::MarkdownTable
   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       |     130   |             124   |                 0.00% |              2253.61% |   0.00019 |      20 |
 | Text::Table::Manifold         |      71   |              65   |                77.51% |              1225.91% |   0.00012 |      20 |
 | Text::ANSITable               |      37   |              31   |               237.43% |               597.51% |   0.00014 |      20 |
 | Text::MarkdownTable           |      36   |              30   |               254.32% |               564.26% |   9e-05   |      20 |
 | Text::Table::TinyColorWide    |      28   |              22   |               346.25% |               427.42% |   0.0002  |      20 |
 | Text::Table::TinyWide         |      26   |              20   |               389.24% |               381.07% |   0.00014 |      21 |
 | Text::Table::More             |      21   |              15   |               513.44% |               283.67% |   0.0001  |      21 |
 | Text::Table                   |      20   |              14   |               533.68% |               271.42% |   0.00016 |      20 |
 | Text::ASCIITable              |      20   |              14   |               727.66% |               184.37% |   0.0002  |      21 |
 | Text::Table::Tiny             |      20   |              14   |               742.57% |               179.34% |   0.00016 |      20 |
 | Text::Table::TinyColor        |      10   |               4   |               959.53% |               122.14% |   0.00021 |      20 |
 | Text::FormatTable             |      10   |               4   |               974.94% |               118.95% |   0.00015 |      20 |
 | Text::Table::TinyBorderStyle  |      10   |               4   |              1217.24% |                78.68% |   0.00012 |      20 |
 | Text::Table::HTML             |       8   |               2   |              1429.79% |                53.85% |   0.00013 |      20 |
 | Text::TabularDisplay          |       8   |               2   |              1434.59% |                53.37% |   0.00015 |      20 |
 | Text::Table::Any              |       7.6 |               1.6 |              1575.00% |                40.51% | 6.1e-05   |      20 |
 | Text::Table::HTML::DataTables |       8   |               2   |              1575.72% |                40.45% |   0.00013 |      22 |
 | Text::Table::CSV              |       6   |               0   |              1848.42% |                20.80% |   0.00012 |      20 |
 | perl -e1 (baseline)           |       6   |               0   |              1891.09% |                18.21% | 9.4e-05   |      20 |
 | Text::Table::Org              |       6   |               0   |              2009.07% |                11.59% |   0.00022 |      20 |
 | Text::Table::Sprintf          |       5   |              -1   |              2253.61% |                 0.00% |   0.00019 |      21 |
 +-------------------------------+-----------+-------------------+-----------------------+-----------------------+-----------+---------+


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::ASCIITable  Text::Table::Tiny  Text::Table::TinyColor  Text::FormatTable  Text::Table::TinyBorderStyle  Text::Table::HTML  Text::TabularDisplay  Text::Table::HTML::DataTables  Text::Table::Any  Text::Table::CSV  perl -e1 (baseline)  Text::Table::Org  Text::Table::Sprintf 
  Text::UnicodeBox::Table          7.7/s                       --                   -45%             -71%                 -72%                        -78%                   -80%               -83%         -84%              -84%               -84%                    -92%               -92%                          -92%               -93%                  -93%                           -93%              -94%              -95%                 -95%              -95%                  -96% 
  Text::Table::Manifold           14.1/s                      83%                     --             -47%                 -49%                        -60%                   -63%               -70%         -71%              -71%               -71%                    -85%               -85%                          -85%               -88%                  -88%                           -88%              -89%              -91%                 -91%              -91%                  -92% 
  Text::ANSITable                 27.0/s                     251%                    91%               --                  -2%                        -24%                   -29%               -43%         -45%              -45%               -45%                    -72%               -72%                          -72%               -78%                  -78%                           -78%              -79%              -83%                 -83%              -83%                  -86% 
  Text::MarkdownTable             27.8/s                     261%                    97%               2%                   --                        -22%                   -27%               -41%         -44%              -44%               -44%                    -72%               -72%                          -72%               -77%                  -77%                           -77%              -78%              -83%                 -83%              -83%                  -86% 
  Text::Table::TinyColorWide      35.7/s                     364%                   153%              32%                  28%                          --                    -7%               -25%         -28%              -28%               -28%                    -64%               -64%                          -64%               -71%                  -71%                           -71%              -72%              -78%                 -78%              -78%                  -82% 
  Text::Table::TinyWide           38.5/s                     400%                   173%              42%                  38%                          7%                     --               -19%         -23%              -23%               -23%                    -61%               -61%                          -61%               -69%                  -69%                           -69%              -70%              -76%                 -76%              -76%                  -80% 
  Text::Table::More               47.6/s                     519%                   238%              76%                  71%                         33%                    23%                 --          -4%               -4%                -4%                    -52%               -52%                          -52%               -61%                  -61%                           -61%              -63%              -71%                 -71%              -71%                  -76% 
  Text::Table                     50.0/s                     550%                   254%              85%                  80%                         39%                    30%                 5%           --                0%                 0%                    -50%               -50%                          -50%               -60%                  -60%                           -60%              -62%              -70%                 -70%              -70%                  -75% 
  Text::ASCIITable                50.0/s                     550%                   254%              85%                  80%                         39%                    30%                 5%           0%                --                 0%                    -50%               -50%                          -50%               -60%                  -60%                           -60%              -62%              -70%                 -70%              -70%                  -75% 
  Text::Table::Tiny               50.0/s                     550%                   254%              85%                  80%                         39%                    30%                 5%           0%                0%                 --                    -50%               -50%                          -50%               -60%                  -60%                           -60%              -62%              -70%                 -70%              -70%                  -75% 
  Text::Table::TinyColor         100.0/s                    1200%                   610%             270%                 260%                        179%                   160%               110%         100%              100%               100%                      --                 0%                            0%               -19%                  -19%                           -19%              -24%              -40%                 -40%              -40%                  -50% 
  Text::FormatTable              100.0/s                    1200%                   610%             270%                 260%                        179%                   160%               110%         100%              100%               100%                      0%                 --                            0%               -19%                  -19%                           -19%              -24%              -40%                 -40%              -40%                  -50% 
  Text::Table::TinyBorderStyle   100.0/s                    1200%                   610%             270%                 260%                        179%                   160%               110%         100%              100%               100%                      0%                 0%                            --               -19%                  -19%                           -19%              -24%              -40%                 -40%              -40%                  -50% 
  Text::Table::HTML              125.0/s                    1525%                   787%             362%                 350%                        250%                   225%               162%         150%              150%               150%                     25%                25%                           25%                 --                    0%                             0%               -5%              -25%                 -25%              -25%                  -37% 
  Text::TabularDisplay           125.0/s                    1525%                   787%             362%                 350%                        250%                   225%               162%         150%              150%               150%                     25%                25%                           25%                 0%                    --                             0%               -5%              -25%                 -25%              -25%                  -37% 
  Text::Table::HTML::DataTables  125.0/s                    1525%                   787%             362%                 350%                        250%                   225%               162%         150%              150%               150%                     25%                25%                           25%                 0%                    0%                             --               -5%              -25%                 -25%              -25%                  -37% 
  Text::Table::Any               131.6/s                    1610%                   834%             386%                 373%                        268%                   242%               176%         163%              163%               163%                     31%                31%                           31%                 5%                    5%                             5%                --              -21%                 -21%              -21%                  -34% 
  Text::Table::CSV               166.7/s                    2066%                  1083%             516%                 500%                        366%                   333%               250%         233%              233%               233%                     66%                66%                           66%                33%                   33%                            33%               26%                --                   0%                0%                  -16% 
  perl -e1 (baseline)            166.7/s                    2066%                  1083%             516%                 500%                        366%                   333%               250%         233%              233%               233%                     66%                66%                           66%                33%                   33%                            33%               26%                0%                   --                0%                  -16% 
  Text::Table::Org               166.7/s                    2066%                  1083%             516%                 500%                        366%                   333%               250%         233%              233%               233%                     66%                66%                           66%                33%                   33%                            33%               26%                0%                   0%                --                  -16% 
  Text::Table::Sprintf           200.0/s                    2500%                  1320%             640%                 620%                        459%                   420%               320%         300%              300%               300%                    100%               100%                          100%                60%                   60%                            60%               52%               19%                  19%               19%                    -- 
 
 Legends:
   Text::ANSITable: mod_overhead_time=31 participant=Text::ANSITable
   Text::ASCIITable: mod_overhead_time=14 participant=Text::ASCIITable
   Text::FormatTable: mod_overhead_time=4 participant=Text::FormatTable
   Text::MarkdownTable: mod_overhead_time=30 participant=Text::MarkdownTable
   Text::Table: mod_overhead_time=14 participant=Text::Table
   Text::Table::Any: mod_overhead_time=1.6 participant=Text::Table::Any
   Text::Table::CSV: mod_overhead_time=0 participant=Text::Table::CSV
   Text::Table::HTML: mod_overhead_time=2 participant=Text::Table::HTML
   Text::Table::HTML::DataTables: mod_overhead_time=2 participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: mod_overhead_time=65 participant=Text::Table::Manifold
   Text::Table::More: mod_overhead_time=15 participant=Text::Table::More
   Text::Table::Org: mod_overhead_time=0 participant=Text::Table::Org
   Text::Table::Sprintf: mod_overhead_time=-1 participant=Text::Table::Sprintf
   Text::Table::Tiny: mod_overhead_time=14 participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: mod_overhead_time=4 participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: mod_overhead_time=4 participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: mod_overhead_time=22 participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: mod_overhead_time=20 participant=Text::Table::TinyWide
   Text::TabularDisplay: mod_overhead_time=2 participant=Text::TabularDisplay
   Text::UnicodeBox::Table: mod_overhead_time=124 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::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/s1/perl5/perlbrew/perls/perl-5.34.0/lib/site_perl/5.34.0/auto/share/dist/Text-Table-HTML-DataTables/datatables-1.10.22/datatables.css">
 <script src="file:///home/s1/perl5/perlbrew/perls/perl-5.34.0/lib/site_perl/5.34.0/auto/share/dist/Text-Table-HTML-DataTables/jquery-2.2.4/jquery-2.2.4.min.js"></script>
 <script src="file:///home/s1/perl5/perlbrew/perls/perl-5.34.0/lib/site_perl/5.34.0/auto/share/dist/Text-Table-HTML-DataTables/datatables-1.10.22/datatables.js"></script>
 <script>var dt_opts = {"dom":"lQfrtip","buttons":["colvis","print"]}; $(document).ready(function() { $("table").DataTable(dt_opts); });</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.

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

=head1 SEE ALSO

L<Acme::CPANModules::HTMLTable>

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

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

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2021, 2020, 2019 by 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.

=cut
