package Acme::CPANModules::TextTable;

our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2021-07-31'; # DATE
our $DIST = 'Acme-CPANModules-TextTable'; # DIST
our $VERSION = '0.012'; # 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',
            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 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.012 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>

=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 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.41 |    711    |                 0.00% |             39301.74% |   0.0006  |      20 |
 | Text::ANSITable               |      3.3  |    310    |               132.56% |             16842.32% |   0.00045 |      20 |
 | Text::Table::More             |      6.7  |    150    |               373.37% |              8223.68% |   0.00022 |      20 |
 | Text::ASCIITable              |     15.1  |     66.4  |               971.50% |              3577.26% | 4.6e-05   |      20 |
 | Text::Table::TinyColorWide    |     21.8  |     45.8  |              1452.89% |              2437.32% | 1.7e-05   |      21 |
 | Text::FormatTable             |     22    |     45    |              1497.13% |              2367.03% | 7.8e-05   |      20 |
 | Text::Table::TinyWide         |     30.7  |     32.6  |              2079.44% |              1707.88% | 1.1e-05   |      21 |
 | Text::Table::Manifold         |     49    |     20    |              3400.88% |              1025.48% | 2.2e-05   |      21 |
 | Text::Table::Tiny             |     52.4  |     19.1  |              3625.18% |               957.71% | 1.4e-05   |      20 |
 | Text::TabularDisplay          |     57    |     18    |              3926.84% |               878.48% | 6.9e-05   |      22 |
 | Text::Table::HTML             |     79    |     13    |              5499.57% |               603.66% | 1.5e-05   |      23 |
 | Text::Table::TinyColor        |     78.8  |     12.7  |              5501.62% |               603.40% | 5.2e-06   |      20 |
 | Text::MarkdownTable           |    110    |      8.9  |              7926.73% |               390.88% |   1e-05   |      20 |
 | Text::Table                   |    140    |      7.4  |              9571.82% |               307.39% | 1.9e-05   |      20 |
 | Text::Table::HTML::DataTables |    165    |      6.06 |             11626.63% |               236.00% | 2.7e-06   |      20 |
 | Text::Table::CSV              |    280    |      3.6  |             19775.29% |                98.24% | 4.3e-06   |      24 |
 | Text::Table::Org              |    296    |      3.37 |             20973.88% |                86.97% | 1.1e-06   |      20 |
 | Text::Table::TinyBorderStyle  |    329    |      3.04 |             23308.91% |                68.32% | 1.1e-06   |      20 |
 | Text::Table::Any              |    519    |      1.93 |             36817.27% |                 6.73% | 1.1e-06   |      20 |
 | Text::Table::Sprintf          |    554    |      1.8  |             39301.74% |                 0.00% | 4.3e-07   |      20 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

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

                                   Rate  Text::UnicodeBox::Table  Text::ANSITable  Text::Table::More  Text::ASCIITable  Text::Table::TinyColorWide  Text::FormatTable  Text::Table::TinyWide  Text::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.41/s                       --             -56%               -78%              -90%                        -93%               -93%                   -95%                   -97%               -97%                  -97%               -98%                    -98%                 -98%         -98%                           -99%              -99%              -99%                          -99%              -99%                  -99% 
  Text::ANSITable                 3.3/s                     129%               --               -51%              -78%                        -85%               -85%                   -89%                   -93%               -93%                  -94%               -95%                    -95%                 -97%         -97%                           -98%              -98%              -98%                          -99%              -99%                  -99% 
  Text::Table::More               6.7/s                     374%             106%                 --              -55%                        -69%               -70%                   -78%                   -86%               -87%                  -88%               -91%                    -91%                 -94%         -95%                           -95%              -97%              -97%                          -97%              -98%                  -98% 
  Text::ASCIITable               15.1/s                     970%             366%               125%                --                        -31%               -32%                   -50%                   -69%               -71%                  -72%               -80%                    -80%                 -86%         -88%                           -90%              -94%              -94%                          -95%              -97%                  -97% 
  Text::Table::TinyColorWide     21.8/s                    1452%             576%               227%               44%                          --                -1%                   -28%                   -56%               -58%                  -60%               -71%                    -72%                 -80%         -83%                           -86%              -92%              -92%                          -93%              -95%                  -96% 
  Text::FormatTable                22/s                    1480%             588%               233%               47%                          1%                 --                   -27%                   -55%               -57%                  -60%               -71%                    -71%                 -80%         -83%                           -86%              -92%              -92%                          -93%              -95%                  -96% 
  Text::Table::TinyWide          30.7/s                    2080%             850%               360%              103%                         40%                38%                     --                   -38%               -41%                  -44%               -60%                    -61%                 -72%         -77%                           -81%              -88%              -89%                          -90%              -94%                  -94% 
  Text::Table::Manifold            49/s                    3454%            1450%               650%              232%                        129%               125%                    63%                     --                -4%                   -9%               -35%                    -36%                 -55%         -63%                           -69%              -82%              -83%                          -84%              -90%                  -91% 
  Text::Table::Tiny              52.4/s                    3622%            1523%               685%              247%                        139%               135%                    70%                     4%                 --                   -5%               -31%                    -33%                 -53%         -61%                           -68%              -81%              -82%                          -84%              -89%                  -90% 
  Text::TabularDisplay             57/s                    3850%            1622%               733%              268%                        154%               150%                    81%                    11%                 6%                    --               -27%                    -29%                 -50%         -58%                           -66%              -80%              -81%                          -83%              -89%                  -90% 
  Text::Table::HTML                79/s                    5369%            2284%              1053%              410%                        252%               246%                   150%                    53%                46%                   38%                 --                     -2%                 -31%         -43%                           -53%              -72%              -74%                          -76%              -85%                  -86% 
  Text::Table::TinyColor         78.8/s                    5498%            2340%              1081%              422%                        260%               254%                   156%                    57%                50%                   41%                 2%                      --                 -29%         -41%                           -52%              -71%              -73%                          -76%              -84%                  -85% 
  Text::MarkdownTable             110/s                    7888%            3383%              1585%              646%                        414%               405%                   266%                   124%               114%                  102%                46%                     42%                   --         -16%                           -31%              -59%              -62%                          -65%              -78%                  -79% 
  Text::Table                     140/s                    9508%            4089%              1927%              797%                        518%               508%                   340%                   170%               158%                  143%                75%                     71%                  20%           --                           -18%              -51%              -54%                          -58%              -73%                  -75% 
  Text::Table::HTML::DataTables   165/s                   11632%            5015%              2375%              995%                        655%               642%                   437%                   230%               215%                  197%               114%                    109%                  46%          22%                             --              -40%              -44%                          -49%              -68%                  -70% 
  Text::Table::CSV                280/s                   19650%            8511%              4066%             1744%                       1172%              1150%                   805%                   455%               430%                  400%               261%                    252%                 147%         105%                            68%                --               -6%                          -15%              -46%                  -50% 
  Text::Table::Org                296/s                   20997%            9098%              4351%             1870%                       1259%              1235%                   867%                   493%               466%                  434%               285%                    276%                 164%         119%                            79%                6%                --                           -9%              -42%                  -46% 
  Text::Table::TinyBorderStyle    329/s                   23288%           10097%              4834%             2084%                       1406%              1380%                   972%                   557%               528%                  492%               327%                    317%                 192%         143%                            99%               18%               10%                            --              -36%                  -40% 
  Text::Table::Any                519/s                   36739%           15962%              7672%             3340%                       2273%              2231%                  1589%                   936%               889%                  832%               573%                    558%                 361%         283%                           213%               86%               74%                           57%                --                   -6% 
  Text::Table::Sprintf            554/s                   39400%           17122%              8233%             3588%                       2444%              2400%                  1711%                  1011%               961%                  900%               622%                    605%                 394%         311%                           236%              100%               87%                           68%                7%                    -- 
 
 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.1 |    90     |                 0.00% |             35656.59% | 8.7e-05 |      21 |
 | Text::ANSITable               |      30.3 |    33     |               172.87% |             13003.66% | 3.2e-05 |      20 |
 | Text::Table::More             |      61.9 |    16.2   |               456.88% |              6320.90% | 7.4e-06 |      20 |
 | Text::ASCIITable              |     161   |     6.23  |              1345.86% |              2373.03% | 6.1e-06 |      20 |
 | Text::FormatTable             |     199   |     5.02  |              1692.31% |              1895.00% | 3.5e-06 |      22 |
 | Text::Table::TinyColorWide    |     214   |     4.68  |              1824.18% |              1758.27% | 3.1e-06 |      20 |
 | Text::Table::TinyWide         |     300   |     3.33  |              2599.02% |              1224.80% | 6.9e-07 |      20 |
 | Text::TabularDisplay          |     426   |     2.35  |              3733.77% |               832.68% | 6.9e-07 |      20 |
 | Text::Table::Manifold         |     436   |     2.29  |              3826.91% |               810.55% | 2.2e-06 |      20 |
 | Text::Table::Tiny             |     470   |     2.1   |              4135.97% |               744.12% | 2.4e-06 |      20 |
 | Text::MarkdownTable           |     530   |     1.9   |              4692.22% |               646.14% | 3.4e-06 |      20 |
 | Text::Table                   |     620   |     1.6   |              5474.12% |               541.48% | 2.5e-06 |      20 |
 | Text::Table::HTML             |     732   |     1.37  |              6485.78% |               442.94% | 2.7e-07 |      20 |
 | Text::Table::TinyColor        |     736   |     1.36  |              6525.02% |               439.72% | 4.3e-07 |      20 |
 | Text::Table::HTML::DataTables |    1200   |     0.81  |             11046.38% |               220.79% | 4.4e-06 |      20 |
 | Text::Table::Org              |    2160   |     0.463 |             19338.45% |                83.95% | 2.1e-07 |      20 |
 | Text::Table::CSV              |    2170   |     0.46  |             19449.29% |                82.90% | 5.2e-08 |      21 |
 | Text::Table::TinyBorderStyle  |    2200   |     0.455 |             19699.86% |                80.59% | 2.1e-07 |      20 |
 | Text::Table::Any              |    3820   |     0.262 |             34290.44% |                 3.97% | 2.3e-07 |      28 |
 | Text::Table::Sprintf          |    3970   |     0.252 |             35656.59% |                 0.00% | 5.2e-08 |      21 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+---------+---------+

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::HTML  Text::Table::TinyColor  Text::Table::HTML::DataTables  Text::Table::Org  Text::Table::CSV  Text::Table::TinyBorderStyle  Text::Table::Any  Text::Table::Sprintf 
  Text::UnicodeBox::Table        11.1/s                       --             -63%               -82%              -93%               -94%                        -94%                   -96%                  -97%                   -97%               -97%                 -97%         -98%               -98%                    -98%                           -99%              -99%              -99%                          -99%              -99%                  -99% 
  Text::ANSITable                30.3/s                     172%               --               -50%              -81%               -84%                        -85%                   -89%                  -92%                   -93%               -93%                 -94%         -95%               -95%                    -95%                           -97%              -98%              -98%                          -98%              -99%                  -99% 
  Text::Table::More              61.9/s                     455%             103%                 --              -61%               -69%                        -71%                   -79%                  -85%                   -85%               -87%                 -88%         -90%               -91%                    -91%                           -95%              -97%              -97%                          -97%              -98%                  -98% 
  Text::ASCIITable                161/s                    1344%             429%               160%                --               -19%                        -24%                   -46%                  -62%                   -63%               -66%                 -69%         -74%               -78%                    -78%                           -86%              -92%              -92%                          -92%              -95%                  -95% 
  Text::FormatTable               199/s                    1692%             557%               222%               24%                 --                         -6%                   -33%                  -53%                   -54%               -58%                 -62%         -68%               -72%                    -72%                           -83%              -90%              -90%                          -90%              -94%                  -94% 
  Text::Table::TinyColorWide      214/s                    1823%             605%               246%               33%                 7%                          --                   -28%                  -49%                   -51%               -55%                 -59%         -65%               -70%                    -70%                           -82%              -90%              -90%                          -90%              -94%                  -94% 
  Text::Table::TinyWide           300/s                    2602%             890%               386%               87%                50%                         40%                     --                  -29%                   -31%               -36%                 -42%         -51%               -58%                    -59%                           -75%              -86%              -86%                          -86%              -92%                  -92% 
  Text::TabularDisplay            426/s                    3729%            1304%               589%              165%               113%                         99%                    41%                    --                    -2%               -10%                 -19%         -31%               -41%                    -42%                           -65%              -80%              -80%                          -80%              -88%                  -89% 
  Text::Table::Manifold           436/s                    3830%            1341%               607%              172%               119%                        104%                    45%                    2%                     --                -8%                 -17%         -30%               -40%                    -40%                           -64%              -79%              -79%                          -80%              -88%                  -88% 
  Text::Table::Tiny               470/s                    4185%            1471%               671%              196%               139%                        122%                    58%                   11%                     9%                 --                  -9%         -23%               -34%                    -35%                           -61%              -77%              -78%                          -78%              -87%                  -88% 
  Text::MarkdownTable             530/s                    4636%            1636%               752%              227%               164%                        146%                    75%                   23%                    20%                10%                   --         -15%               -27%                    -28%                           -57%              -75%              -75%                          -76%              -86%                  -86% 
  Text::Table                     620/s                    5525%            1962%               912%              289%               213%                        192%                   108%                   46%                    43%                31%                  18%           --               -14%                    -15%                           -49%              -71%              -71%                          -71%              -83%                  -84% 
  Text::Table::HTML               732/s                    6469%            2308%              1082%              354%               266%                        241%                   143%                   71%                    67%                53%                  38%          16%                 --                      0%                           -40%              -66%              -66%                          -66%              -80%                  -81% 
  Text::Table::TinyColor          736/s                    6517%            2326%              1091%              358%               269%                        244%                   144%                   72%                    68%                54%                  39%          17%                 0%                      --                           -40%              -65%              -66%                          -66%              -80%                  -81% 
  Text::Table::HTML::DataTables  1200/s                   11011%            3974%              1899%              669%               519%                        477%                   311%                  190%                   182%               159%                 134%          97%                69%                     67%                             --              -42%              -43%                          -43%              -67%                  -68% 
  Text::Table::Org               2160/s                   19338%            7027%              3398%             1245%               984%                        910%                   619%                  407%                   394%               353%                 310%         245%               195%                    193%                            74%                --                0%                           -1%              -43%                  -45% 
  Text::Table::CSV               2170/s                   19465%            7073%              3421%             1254%               991%                        917%                   623%                  410%                   397%               356%                 313%         247%               197%                    195%                            76%                0%                --                           -1%              -43%                  -45% 
  Text::Table::TinyBorderStyle   2200/s                   19680%            7152%              3460%             1269%              1003%                        928%                   631%                  416%                   403%               361%                 317%         251%               201%                    198%                            78%                1%                1%                            --              -42%                  -44% 
  Text::Table::Any               3820/s                   34251%           12495%              6083%             2277%              1816%                       1686%                  1170%                  796%                   774%               701%                 625%         510%               422%                    419%                           209%               76%               75%                           73%                --                   -3% 
  Text::Table::Sprintf           3970/s                   35614%           12995%              6328%             2372%              1892%                       1757%                  1221%                  832%                   808%               733%                 653%         534%               443%                    439%                           221%               83%               82%                           80%                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       |     200   | 4         |                 0.00% |             48379.56% | 6.7e-05 |      22 |
 | Text::ANSITable               |    1130   | 0.886     |               355.73% |             10537.69% | 4.3e-07 |      20 |
 | Text::Table::More             |    2500   | 0.41      |               896.85% |              4763.29% | 4.3e-07 |      20 |
 | Text::ASCIITable              |    6100   | 0.16      |              2360.74% |              1870.12% |   2e-07 |      22 |
 | Text::FormatTable             |    8500   | 0.12      |              3338.59% |              1309.87% | 1.8e-07 |      28 |
 | Text::Table                   |    9400   | 0.11      |              3676.61% |              1183.68% | 2.4e-07 |      25 |
 | Text::Table::Manifold         |    9400   | 0.11      |              3708.10% |              1173.06% | 1.6e-07 |      20 |
 | Text::Table::TinyColorWide    |    9700   | 0.1       |              3829.10% |              1133.86% | 2.1e-07 |      20 |
 | Text::Table::TinyWide         |   13700   | 0.0731    |              5427.41% |               777.08% | 2.3e-08 |      26 |
 | Text::Table::TinyBorderStyle  |   14532.3 | 0.0688123 |              5769.69% |               725.93% | 2.4e-11 |      20 |
 | Text::MarkdownTable           |   15000   | 0.066     |              6062.05% |               686.74% | 1.1e-07 |      28 |
 | Text::Table::HTML::DataTables |   18000   | 0.055     |              7188.91% |               565.11% | 8.9e-08 |      29 |
 | Text::Table::Tiny             |   18000   | 0.055     |              7270.97% |               557.71% | 8.6e-08 |      31 |
 | Text::TabularDisplay          |   18000   | 0.054     |              7331.71% |               552.33% | 1.9e-07 |      33 |
 | Text::Table::TinyColor        |   28800   | 0.0347    |             11543.81% |               316.35% | 1.1e-08 |      30 |
 | Text::Table::HTML             |   39000   | 0.026     |             15479.67% |               211.17% | 4.8e-08 |      25 |
 | Text::Table::Org              |   67000   | 0.015     |             26827.87% |                80.03% |   2e-08 |      20 |
 | Text::Table::CSV              |   95040   | 0.010522  |             38287.51% |                26.29% | 2.2e-11 |      20 |
 | Text::Table::Any              |  110000   | 0.0093    |             43460.29% |                11.29% | 1.1e-08 |      27 |
 | Text::Table::Sprintf          |  120030   | 0.0083315 |             48379.56% |                 0.00% | 2.4e-11 |      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  Text::Table::Manifold  Text::Table::TinyColorWide  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            200/s                       --             -77%               -89%              -96%               -97%         -97%                   -97%                        -97%                   -98%                          -98%                 -98%                           -98%               -98%                  -98%                    -99%               -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                   1130/s                     351%               --               -53%              -81%               -86%         -87%                   -87%                        -88%                   -91%                          -92%                 -92%                           -93%               -93%                  -93%                    -96%               -97%              -98%              -98%              -98%                  -99% 
  Text::Table::More                 2500/s                     875%             116%                 --              -60%               -70%         -73%                   -73%                        -75%                   -82%                          -83%                 -83%                           -86%               -86%                  -86%                    -91%               -93%              -96%              -97%              -97%                  -97% 
  Text::ASCIITable                  6100/s                    2400%             453%               156%                --               -25%         -31%                   -31%                        -37%                   -54%                          -56%                 -58%                           -65%               -65%                  -66%                    -78%               -83%              -90%              -93%              -94%                  -94% 
  Text::FormatTable                 8500/s                    3233%             638%               241%               33%                 --          -8%                    -8%                        -16%                   -39%                          -42%                 -44%                           -54%               -54%                  -55%                    -71%               -78%              -87%              -91%              -92%                  -93% 
  Text::Table                       9400/s                    3536%             705%               272%               45%                 9%           --                     0%                         -9%                   -33%                          -37%                 -40%                           -50%               -50%                  -50%                    -68%               -76%              -86%              -90%              -91%                  -92% 
  Text::Table::Manifold             9400/s                    3536%             705%               272%               45%                 9%           0%                     --                         -9%                   -33%                          -37%                 -40%                           -50%               -50%                  -50%                    -68%               -76%              -86%              -90%              -91%                  -92% 
  Text::Table::TinyColorWide        9700/s                    3900%             786%               309%               59%                19%           9%                     9%                          --                   -26%                          -31%                 -34%                           -45%               -45%                  -46%                    -65%               -74%              -85%              -89%              -90%                  -91% 
  Text::Table::TinyWide            13700/s                    5371%            1112%               460%              118%                64%          50%                    50%                         36%                     --                           -5%                  -9%                           -24%               -24%                  -26%                    -52%               -64%              -79%              -85%              -87%                  -88% 
  Text::Table::TinyBorderStyle   14532.3/s                    5712%            1187%               495%              132%                74%          59%                    59%                         45%                     6%                            --                  -4%                           -20%               -20%                  -21%                    -49%               -62%              -78%              -84%              -86%                  -87% 
  Text::MarkdownTable              15000/s                    5960%            1242%               521%              142%                81%          66%                    66%                         51%                    10%                            4%                   --                           -16%               -16%                  -18%                    -47%               -60%              -77%              -84%              -85%                  -87% 
  Text::Table::HTML::DataTables    18000/s                    7172%            1510%               645%              190%               118%         100%                   100%                         81%                    32%                           25%                  19%                             --                 0%                   -1%                    -36%               -52%              -72%              -80%              -83%                  -84% 
  Text::Table::Tiny                18000/s                    7172%            1510%               645%              190%               118%         100%                   100%                         81%                    32%                           25%                  19%                             0%                 --                   -1%                    -36%               -52%              -72%              -80%              -83%                  -84% 
  Text::TabularDisplay             18000/s                    7307%            1540%               659%              196%               122%         103%                   103%                         85%                    35%                           27%                  22%                             1%                 1%                    --                    -35%               -51%              -72%              -80%              -82%                  -84% 
  Text::Table::TinyColor           28800/s                   11427%            2453%              1081%              361%               245%         217%                   217%                        188%                   110%                           98%                  90%                            58%                58%                   55%                      --               -25%              -56%              -69%              -73%                  -75% 
  Text::Table::HTML                39000/s                   15284%            3307%              1476%              515%               361%         323%                   323%                        284%                   181%                          164%                 153%                           111%               111%                  107%                     33%                 --              -42%              -59%              -64%                  -67% 
  Text::Table::Org                 67000/s                   26566%            5806%              2633%              966%               700%         633%                   633%                        566%                   387%                          358%                 340%                           266%               266%                  260%                    131%                73%                --              -29%              -38%                  -44% 
  Text::Table::CSV                 95040/s                   37915%            8320%              3796%             1420%              1040%         945%                   945%                        850%                   594%                          553%                 527%                           422%               422%                  413%                    229%               147%               42%                --              -11%                  -20% 
  Text::Table::Any                110000/s                   42910%            9426%              4308%             1620%              1190%        1082%                  1082%                        975%                   686%                          639%                 609%                           491%               491%                  480%                    273%               179%               61%               13%                --                  -10% 
  Text::Table::Sprintf            120030/s                   47910%           10534%              4821%             1820%              1340%        1220%                  1220%                       1100%                   777%                          725%                 692%                           560%               560%                  548%                    316%               212%               80%               26%               11%                    -- 
 
 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% |             63302.47% |   7e-05 |      20 |
 | Text::ANSITable               |      3800 | 0.26      |               561.71% |              9481.57% | 1.1e-06 |      20 |
 | Text::Table::More             |      9400 | 0.11      |              1536.77% |              3773.62% | 2.3e-07 |      26 |
 | Text::Table::Manifold         |     15000 | 0.066     |              2566.70% |              2277.56% | 4.3e-07 |      20 |
 | Text::Table::TinyBorderStyle  |     19200 | 0.0521    |              3255.04% |              1789.77% | 2.7e-08 |      20 |
 | Text::ASCIITable              |     22000 | 0.046     |              3691.71% |              1572.13% | 1.1e-07 |      20 |
 | Text::Table                   |     20000 | 0.04      |              3854.97% |              1503.11% | 5.5e-07 |      29 |
 | Text::Table::HTML::DataTables |     24000 | 0.041     |              4175.85% |              1382.81% | 9.9e-08 |      23 |
 | Text::MarkdownTable           |     31000 | 0.033     |              5234.80% |              1088.47% |   6e-08 |      25 |
 | Text::FormatTable             |     44000 | 0.023     |              7643.36% |               718.80% | 2.4e-08 |      24 |
 | Text::Table::TinyColorWide    |     57000 | 0.018     |              9828.97% |               538.56% | 2.3e-08 |      28 |
 | Text::Table::Tiny             |     68000 | 0.015     |             11863.81% |               429.95% |   2e-08 |      20 |
 | Text::Table::TinyWide         |     73855 | 0.01354   |             12802.16% |               391.41% | 2.2e-11 |      22 |
 | Text::TabularDisplay          |     78000 | 0.013     |             13497.23% |               366.29% | 2.7e-08 |      20 |
 | Text::Table::TinyColor        |    112390 | 0.0088976 |             19534.00% |               222.92% | 2.2e-11 |      20 |
 | Text::Table::Org              |    180000 | 0.0055    |             31569.47% |               100.20% | 6.7e-09 |      20 |
 | Text::Table::HTML             |    182000 | 0.0055    |             31670.29% |                99.57% |   5e-09 |      20 |
 | Text::Table::Any              |    250000 | 0.0039    |             44342.72% |                42.66% | 4.9e-09 |      21 |
 | Text::Table::Sprintf          |    350000 | 0.0029    |             60999.18% |                 3.77% | 3.3e-09 |      20 |
 | Text::Table::CSV              |    360000 | 0.0028    |             63302.47% |                 0.00% | 3.3e-09 |      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::Org  Text::Table::HTML  Text::Table::Any  Text::Table::Sprintf  Text::Table::CSV 
  Text::UnicodeBox::Table           600/s                       --             -87%               -94%                   -96%                          -97%              -97%                           -97%         -98%                 -98%               -98%                        -99%               -99%                   -99%                  -99%                    -99%              -99%               -99%              -99%                  -99%              -99% 
  Text::ANSITable                  3800/s                     669%               --               -57%                   -74%                          -79%              -82%                           -84%         -84%                 -87%               -91%                        -93%               -94%                   -94%                  -95%                    -96%              -97%               -97%              -98%                  -98%              -98% 
  Text::Table::More                9400/s                    1718%             136%                 --                   -40%                          -52%              -58%                           -62%         -63%                 -70%               -79%                        -83%               -86%                   -87%                  -88%                    -91%              -95%               -95%              -96%                  -97%              -97% 
  Text::Table::Manifold           15000/s                    2930%             293%                66%                     --                          -21%              -30%                           -37%         -39%                 -50%               -65%                        -72%               -77%                   -79%                  -80%                    -86%              -91%               -91%              -94%                  -95%              -95% 
  Text::Table::TinyBorderStyle    19200/s                    3738%             399%               111%                    26%                            --              -11%                           -21%         -23%                 -36%               -55%                        -65%               -71%                   -74%                  -75%                    -82%              -89%               -89%              -92%                  -94%              -94% 
  Text::ASCIITable                22000/s                    4247%             465%               139%                    43%                           13%                --                           -10%         -13%                 -28%               -50%                        -60%               -67%                   -70%                  -71%                    -80%              -88%               -88%              -91%                  -93%              -93% 
  Text::Table::HTML::DataTables   24000/s                    4778%             534%               168%                    60%                           27%               12%                             --          -2%                 -19%               -43%                        -56%               -63%                   -66%                  -68%                    -78%              -86%               -86%              -90%                  -92%              -93% 
  Text::Table                     20000/s                    4900%             550%               175%                    65%                           30%               14%                             2%           --                 -17%               -42%                        -55%               -62%                   -66%                  -67%                    -77%              -86%               -86%              -90%                  -92%              -93% 
  Text::MarkdownTable             31000/s                    5960%             687%               233%                   100%                           57%               39%                            24%          21%                   --               -30%                        -45%               -54%                   -58%                  -60%                    -73%              -83%               -83%              -88%                  -91%              -91% 
  Text::FormatTable               44000/s                    8595%            1030%               378%                   186%                          126%              100%                            78%          73%                  43%                 --                        -21%               -34%                   -41%                  -43%                    -61%              -76%               -76%              -83%                  -87%              -87% 
  Text::Table::TinyColorWide      57000/s                   11011%            1344%               511%                   266%                          189%              155%                           127%         122%                  83%                27%                          --               -16%                   -24%                  -27%                    -50%              -69%               -69%              -78%                  -83%              -84% 
  Text::Table::Tiny               68000/s                   13233%            1633%               633%                   340%                          247%              206%                           173%         166%                 120%                53%                         19%                 --                    -9%                  -13%                    -40%              -63%               -63%              -74%                  -80%              -81% 
  Text::Table::TinyWide           73855/s                   14671%            1820%               712%                   387%                          284%              239%                           202%         195%                 143%                69%                         32%                10%                     --                   -3%                    -34%              -59%               -59%              -71%                  -78%              -79% 
  Text::TabularDisplay            78000/s                   15284%            1900%               746%                   407%                          300%              253%                           215%         207%                 153%                76%                         38%                15%                     4%                    --                    -31%              -57%               -57%              -70%                  -77%              -78% 
  Text::Table::TinyColor         112390/s                   22377%            2822%              1136%                   641%                          485%              416%                           360%         349%                 270%               158%                        102%                68%                    52%                   46%                      --              -38%               -38%              -56%                  -67%              -68% 
  Text::Table::Org               180000/s                   36263%            4627%              1900%                  1100%                          847%              736%                           645%         627%                 500%               318%                        227%               172%                   146%                  136%                     61%                --                 0%              -29%                  -47%              -49% 
  Text::Table::HTML              182000/s                   36263%            4627%              1900%                  1100%                          847%              736%                           645%         627%                 500%               318%                        227%               172%                   146%                  136%                     61%                0%                 --              -29%                  -47%              -49% 
  Text::Table::Any               250000/s                   51182%            6566%              2720%                  1592%                         1235%             1079%                           951%         925%                 746%               489%                        361%               284%                   247%                  233%                    128%               41%                41%                --                  -25%              -28% 
  Text::Table::Sprintf           350000/s                   68865%            8865%              3693%                  2175%                         1696%             1486%                          1313%        1279%                1037%               693%                        520%               417%                   366%                  348%                    206%               89%                89%               34%                    --               -3% 
  Text::Table::CSV               360000/s                   71328%            9185%              3828%                  2257%                         1760%             1542%                          1364%        1328%                1078%               721%                        542%               435%                   383%                  364%                    217%               96%                96%               39%                    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 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       |        52 |   19      |                 0.00% |             36279.12% |   0.00014 |      20 |
 | Text::ANSITable               |       142 |    7.03   |               173.85% |             13184.33% |   6e-06   |      20 |
 | Text::Table::More             |       320 |    3.2    |               508.80% |              5875.55% | 4.5e-06   |      20 |
 | Text::ASCIITable              |       630 |    1.6    |              1114.70% |              2894.90% | 3.6e-06   |      20 |
 | Text::FormatTable             |       880 |    1.14   |              1594.21% |              2047.27% | 6.9e-07   |      20 |
 | Text::Table::TinyColorWide    |      1080 |    0.922  |              1987.25% |              1642.92% | 4.3e-07   |      20 |
 | Text::Table                   |      1230 |    0.815  |              2259.82% |              1441.60% | 6.4e-07   |      20 |
 | Text::Table::TinyWide         |      1530 |    0.655  |              2839.82% |              1137.46% | 4.2e-07   |      21 |
 | Text::Table::Manifold         |      2040 |    0.49   |              3824.99% |               826.86% | 4.3e-07   |      20 |
 | Text::Table::Tiny             |      2450 |    0.408  |              4614.03% |               671.72% | 2.1e-07   |      20 |
 | Text::TabularDisplay          |      2750 |    0.364  |              5182.31% |               588.70% | 2.3e-07   |      26 |
 | Text::Table::TinyColor        |      3660 |    0.273  |              6946.22% |               416.29% | 2.1e-07   |      20 |
 | Text::Table::TinyBorderStyle  |      4060 |    0.246  |              7709.16% |               365.85% |   5e-08   |      23 |
 | Text::MarkdownTable           |      4330 |    0.231  |              8232.22% |               336.61% | 2.1e-07   |      21 |
 | Text::Table::HTML             |      4770 |    0.21   |              9077.91% |               296.38% | 1.6e-07   |      20 |
 | Text::Table::HTML::DataTables |      6200 |    0.16   |             11752.53% |               206.93% | 2.1e-07   |      20 |
 | Text::Table::Org              |     10900 |    0.0915 |             20941.40% |                72.89% |   7e-08   |      26 |
 | Text::Table::CSV              |     14000 |    0.07   |             27456.77% |                32.02% | 1.1e-07   |      20 |
 | Text::Table::Any              |     18000 |    0.055  |             35000.75% |                 3.64% |   8e-08   |      20 |
 | Text::Table::Sprintf          |     18900 |    0.0529 |             36279.12% |                 0.00% |   2e-08   |      34 |
 +-------------------------------+-----------+-----------+-----------------------+-----------------------+-----------+---------+

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           52/s                       --             -63%               -83%              -91%               -94%                        -95%         -95%                   -96%                   -97%               -97%                  -98%                    -98%                          -98%                 -98%               -98%                           -99%              -99%              -99%              -99%                  -99% 
  Text::ANSITable                  142/s                     170%               --               -54%              -77%               -83%                        -86%         -88%                   -90%                   -93%               -94%                  -94%                    -96%                          -96%                 -96%               -97%                           -97%              -98%              -99%              -99%                  -99% 
  Text::Table::More                320/s                     493%             119%                 --              -50%               -64%                        -71%         -74%                   -79%                   -84%               -87%                  -88%                    -91%                          -92%                 -92%               -93%                           -95%              -97%              -97%              -98%                  -98% 
  Text::ASCIITable                 630/s                    1087%             339%               100%                --               -28%                        -42%         -49%                   -59%                   -69%               -74%                  -77%                    -82%                          -84%                 -85%               -86%                           -90%              -94%              -95%              -96%                  -96% 
  Text::FormatTable                880/s                    1566%             516%               180%               40%                 --                        -19%         -28%                   -42%                   -57%               -64%                  -68%                    -76%                          -78%                 -79%               -81%                           -85%              -91%              -93%              -95%                  -95% 
  Text::Table::TinyColorWide      1080/s                    1960%             662%               247%               73%                23%                          --         -11%                   -28%                   -46%               -55%                  -60%                    -70%                          -73%                 -74%               -77%                           -82%              -90%              -92%              -94%                  -94% 
  Text::Table                     1230/s                    2231%             762%               292%               96%                39%                         13%           --                   -19%                   -39%               -49%                  -55%                    -66%                          -69%                 -71%               -74%                           -80%              -88%              -91%              -93%                  -93% 
  Text::Table::TinyWide           1530/s                    2800%             973%               388%              144%                74%                         40%          24%                     --                   -25%               -37%                  -44%                    -58%                          -62%                 -64%               -67%                           -75%              -86%              -89%              -91%                  -91% 
  Text::Table::Manifold           2040/s                    3777%            1334%               553%              226%               132%                         88%          66%                    33%                     --               -16%                  -25%                    -44%                          -49%                 -52%               -57%                           -67%              -81%              -85%              -88%                  -89% 
  Text::Table::Tiny               2450/s                    4556%            1623%               684%              292%               179%                        125%          99%                    60%                    20%                 --                  -10%                    -33%                          -39%                 -43%               -48%                           -60%              -77%              -82%              -86%                  -87% 
  Text::TabularDisplay            2750/s                    5119%            1831%               779%              339%               213%                        153%         123%                    79%                    34%                12%                    --                    -24%                          -32%                 -36%               -42%                           -56%              -74%              -80%              -84%                  -85% 
  Text::Table::TinyColor          3660/s                    6859%            2475%              1072%              486%               317%                        237%         198%                   139%                    79%                49%                   33%                      --                           -9%                 -15%               -23%                           -41%              -66%              -74%              -79%                  -80% 
  Text::Table::TinyBorderStyle    4060/s                    7623%            2757%              1200%              550%               363%                        274%         231%                   166%                    99%                65%                   47%                     10%                            --                  -6%               -14%                           -34%              -62%              -71%              -77%                  -78% 
  Text::MarkdownTable             4330/s                    8125%            2943%              1285%              592%               393%                        299%         252%                   183%                   112%                76%                   57%                     18%                            6%                   --                -9%                           -30%              -60%              -69%              -76%                  -77% 
  Text::Table::HTML               4770/s                    8947%            3247%              1423%              661%               442%                        339%         288%                   211%                   133%                94%                   73%                     30%                           17%                  10%                 --                           -23%              -56%              -66%              -73%                  -74% 
  Text::Table::HTML::DataTables   6200/s                   11775%            4293%              1900%              900%               612%                        476%         409%                   309%                   206%               154%                  127%                     70%                           53%                  44%                31%                             --              -42%              -56%              -65%                  -66% 
  Text::Table::Org               10900/s                   20665%            7583%              3397%             1648%              1145%                        907%         790%                   615%                   435%               345%                  297%                    198%                          168%                 152%               129%                            74%                --              -23%              -39%                  -42% 
  Text::Table::CSV               14000/s                   27042%            9942%              4471%             2185%              1528%                       1217%        1064%                   835%                   599%               482%                  419%                    290%                          251%                 229%               199%                           128%               30%                --              -21%                  -24% 
  Text::Table::Any               18000/s                   34445%           12681%              5718%             2809%              1972%                       1576%        1381%                  1090%                   790%               641%                  561%                    396%                          347%                 320%               281%                           190%               66%               27%                --                   -3% 
  Text::Table::Sprintf           18900/s                   35816%           13189%              5949%             2924%              2055%                       1642%        1440%                  1138%                   826%               671%                  588%                    416%                          365%                 336%               296%                           202%               72%               32%                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


=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   |             126.1 |                 0.00% |              3242.20% |   0.00018 |      20 |
 | Text::Table::Manifold         |      72   |              68.1 |                81.54% |              1741.01% |   0.00012 |      20 |
 | Text::ANSITable               |      38   |              34.1 |               242.78% |               875.03% |   0.00012 |      20 |
 | Text::MarkdownTable           |      34   |              30.1 |               278.89% |               782.11% |   0.0001  |      20 |
 | Text::Table::TinyColorWide    |      28   |              24.1 |               370.49% |               610.37% |   0.00015 |      20 |
 | Text::Table::TinyWide         |      26   |              22.1 |               401.17% |               566.87% |   0.00013 |      20 |
 | Text::Table::More             |      20   |              16.1 |               534.76% |               426.53% |   0.00017 |      21 |
 | Text::Table                   |      20   |              16.1 |               578.97% |               392.25% |   0.00021 |      20 |
 | Text::Table::Tiny             |      10   |               6.1 |               768.66% |               284.75% |   0.00023 |      20 |
 | Text::ASCIITable              |      10   |               6.1 |               782.49% |               278.72% |   0.0002  |      21 |
 | Text::FormatTable             |      10   |               6.1 |               930.81% |               224.23% |   0.00029 |      20 |
 | Text::Table::TinyColor        |      10   |               6.1 |              1012.41% |               200.45% |   0.00014 |      20 |
 | Text::Table::TinyBorderStyle  |      10   |               6.1 |              1195.28% |               158.03% |   0.00022 |      21 |
 | Text::TabularDisplay          |       9   |               5.1 |              1279.66% |               142.25% |   0.00019 |      20 |
 | Text::Table::HTML             |       8   |               4.1 |              1496.62% |               109.33% |   0.00016 |      20 |
 | Text::Table::HTML::DataTables |       8   |               4.1 |              1500.28% |               108.85% |   0.00019 |      20 |
 | Text::Table::Any              |       7   |               3.1 |              1706.85% |                84.97% | 7.5e-05   |      20 |
 | Text::Table::Org              |       6.9 |               3   |              1794.83% |                76.39% | 4.9e-05   |      20 |
 | Text::Table::CSV              |       7   |               3.1 |              1848.76% |                71.50% | 8.1e-05   |      21 |
 | Text::Table::Sprintf          |       6   |               2.1 |              1955.85% |                62.57% | 9.8e-05   |      20 |
 | perl -e1 (baseline)           |       3.9 |               0   |              3242.20% |                 0.00% | 2.3e-05   |      20 |
 +-------------------------------+-----------+-------------------+-----------------------+-----------------------+-----------+---------+


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

                                    Rate  Text::UnicodeBox::Table  Text::Table::Manifold  Text::ANSITable  Text::MarkdownTable  Text::Table::TinyColorWide  Text::Table::TinyWide  Text::Table::More  Text::Table  Text::Table::Tiny  Text::ASCIITable  Text::FormatTable  Text::Table::TinyColor  Text::Table::TinyBorderStyle  Text::TabularDisplay  Text::Table::HTML  Text::Table::HTML::DataTables  Text::Table::Any  Text::Table::CSV  Text::Table::Org  Text::Table::Sprintf  perl -e1 (baseline) 
  Text::UnicodeBox::Table          7.7/s                       --                   -44%             -70%                 -73%                        -78%                   -80%               -84%         -84%               -92%              -92%               -92%                    -92%                          -92%                  -93%               -93%                           -93%              -94%              -94%              -94%                  -95%                 -97% 
  Text::Table::Manifold           13.9/s                      80%                     --             -47%                 -52%                        -61%                   -63%               -72%         -72%               -86%              -86%               -86%                    -86%                          -86%                  -87%               -88%                           -88%              -90%              -90%              -90%                  -91%                 -94% 
  Text::ANSITable                 26.3/s                     242%                    89%               --                 -10%                        -26%                   -31%               -47%         -47%               -73%              -73%               -73%                    -73%                          -73%                  -76%               -78%                           -78%              -81%              -81%              -81%                  -84%                 -89% 
  Text::MarkdownTable             29.4/s                     282%                   111%              11%                   --                        -17%                   -23%               -41%         -41%               -70%              -70%               -70%                    -70%                          -70%                  -73%               -76%                           -76%              -79%              -79%              -79%                  -82%                 -88% 
  Text::Table::TinyColorWide      35.7/s                     364%                   157%              35%                  21%                          --                    -7%               -28%         -28%               -64%              -64%               -64%                    -64%                          -64%                  -67%               -71%                           -71%              -75%              -75%              -75%                  -78%                 -86% 
  Text::Table::TinyWide           38.5/s                     400%                   176%              46%                  30%                          7%                     --               -23%         -23%               -61%              -61%               -61%                    -61%                          -61%                  -65%               -69%                           -69%              -73%              -73%              -73%                  -76%                 -85% 
  Text::Table::More               50.0/s                     550%                   260%              89%                  70%                         39%                    30%                 --           0%               -50%              -50%               -50%                    -50%                          -50%                  -55%               -60%                           -60%              -65%              -65%              -65%                  -70%                 -80% 
  Text::Table                     50.0/s                     550%                   260%              89%                  70%                         39%                    30%                 0%           --               -50%              -50%               -50%                    -50%                          -50%                  -55%               -60%                           -60%              -65%              -65%              -65%                  -70%                 -80% 
  Text::Table::Tiny              100.0/s                    1200%                   620%             280%                 240%                        179%                   160%               100%         100%                 --                0%                 0%                      0%                            0%                   -9%               -19%                           -19%              -30%              -30%              -30%                  -40%                 -61% 
  Text::ASCIITable               100.0/s                    1200%                   620%             280%                 240%                        179%                   160%               100%         100%                 0%                --                 0%                      0%                            0%                   -9%               -19%                           -19%              -30%              -30%              -30%                  -40%                 -61% 
  Text::FormatTable              100.0/s                    1200%                   620%             280%                 240%                        179%                   160%               100%         100%                 0%                0%                 --                      0%                            0%                   -9%               -19%                           -19%              -30%              -30%              -30%                  -40%                 -61% 
  Text::Table::TinyColor         100.0/s                    1200%                   620%             280%                 240%                        179%                   160%               100%         100%                 0%                0%                 0%                      --                            0%                   -9%               -19%                           -19%              -30%              -30%              -30%                  -40%                 -61% 
  Text::Table::TinyBorderStyle   100.0/s                    1200%                   620%             280%                 240%                        179%                   160%               100%         100%                 0%                0%                 0%                      0%                            --                   -9%               -19%                           -19%              -30%              -30%              -30%                  -40%                 -61% 
  Text::TabularDisplay           111.1/s                    1344%                   700%             322%                 277%                        211%                   188%               122%         122%                11%               11%                11%                     11%                           11%                    --               -11%                           -11%              -22%              -22%              -23%                  -33%                 -56% 
  Text::Table::HTML              125.0/s                    1525%                   800%             375%                 325%                        250%                   225%               150%         150%                25%               25%                25%                     25%                           25%                   12%                 --                             0%              -12%              -12%              -13%                  -25%                 -51% 
  Text::Table::HTML::DataTables  125.0/s                    1525%                   800%             375%                 325%                        250%                   225%               150%         150%                25%               25%                25%                     25%                           25%                   12%                 0%                             --              -12%              -12%              -13%                  -25%                 -51% 
  Text::Table::Any               142.9/s                    1757%                   928%             442%                 385%                        300%                   271%               185%         185%                42%               42%                42%                     42%                           42%                   28%                14%                            14%                --                0%               -1%                  -14%                 -44% 
  Text::Table::CSV               142.9/s                    1757%                   928%             442%                 385%                        300%                   271%               185%         185%                42%               42%                42%                     42%                           42%                   28%                14%                            14%                0%                --               -1%                  -14%                 -44% 
  Text::Table::Org               144.9/s                    1784%                   943%             450%                 392%                        305%                   276%               189%         189%                44%               44%                44%                     44%                           44%                   30%                15%                            15%                1%                1%                --                  -13%                 -43% 
  Text::Table::Sprintf           166.7/s                    2066%                  1100%             533%                 466%                        366%                   333%               233%         233%                66%               66%                66%                     66%                           66%                   50%                33%                            33%               16%               16%               15%                    --                 -35% 
  perl -e1 (baseline)            256.4/s                    3233%                  1746%             874%                 771%                        617%                   566%               412%         412%               156%              156%               156%                    156%                          156%                  130%               105%                           105%               79%               79%               76%                   53%                   -- 
 
 Legends:
   Text::ANSITable: mod_overhead_time=34.1 participant=Text::ANSITable
   Text::ASCIITable: mod_overhead_time=6.1 participant=Text::ASCIITable
   Text::FormatTable: mod_overhead_time=6.1 participant=Text::FormatTable
   Text::MarkdownTable: mod_overhead_time=30.1 participant=Text::MarkdownTable
   Text::Table: mod_overhead_time=16.1 participant=Text::Table
   Text::Table::Any: mod_overhead_time=3.1 participant=Text::Table::Any
   Text::Table::CSV: mod_overhead_time=3.1 participant=Text::Table::CSV
   Text::Table::HTML: mod_overhead_time=4.1 participant=Text::Table::HTML
   Text::Table::HTML::DataTables: mod_overhead_time=4.1 participant=Text::Table::HTML::DataTables
   Text::Table::Manifold: mod_overhead_time=68.1 participant=Text::Table::Manifold
   Text::Table::More: mod_overhead_time=16.1 participant=Text::Table::More
   Text::Table::Org: mod_overhead_time=3 participant=Text::Table::Org
   Text::Table::Sprintf: mod_overhead_time=2.1 participant=Text::Table::Sprintf
   Text::Table::Tiny: mod_overhead_time=6.1 participant=Text::Table::Tiny
   Text::Table::TinyBorderStyle: mod_overhead_time=6.1 participant=Text::Table::TinyBorderStyle
   Text::Table::TinyColor: mod_overhead_time=6.1 participant=Text::Table::TinyColor
   Text::Table::TinyColorWide: mod_overhead_time=24.1 participant=Text::Table::TinyColorWide
   Text::Table::TinyWide: mod_overhead_time=22.1 participant=Text::Table::TinyWide
   Text::TabularDisplay: mod_overhead_time=5.1 participant=Text::TabularDisplay
   Text::UnicodeBox::Table: mod_overhead_time=126.1 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
