Perl x Open Food Facts Hackathon: Paris, France - May 24-25 Learn more

NAME

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

VERSION

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

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 bencher or run bencher --help.

DESCRIPTION

Currently excluded from this list are:

ACME::CPANMODULES ENTRIES

Text::Table::Any

Author: PERLANCAR

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

Text::SimpleTable

Author: MRAMBERG

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

Text::UnicodeBox::Table

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.

Text::Table::Manifold

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 Text::UnicodeBox::Table); so in this way it is similar to Text::Table::Any.

Text::ANSITable

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: Text::Table::Span (later renamed to 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.

Text::ASCIITable

Author: LUNATIC

Text::FormatTable

Author: TREY

Text::MarkdownTable

Author: VOJ

Text::Table

Author: SHLOMIF

Text::Table::Tiny

Author: NEILB

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

Text::Table::TinyBorderStyle

Author: PERLANCAR

Text::Table::More

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 Text::ANSITable, although currently it does not offer nearly as many formatting options as Text::ANSITable.

Text::Table::Sprintf

Author: PERLANCAR

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

Text::Table::TinyColor

Author: PERLANCAR

Text::Table::TinyColorWide

Author: PERLANCAR

Text::Table::TinyWide

Author: PERLANCAR

Text::Table::Org

Author: PERLANCAR

Text::Table::CSV

Author: PERLANCAR

Text::Table::HTML

Author: PERLANCAR

Text::Table::HTML::DataTables

Author: PERLANCAR

Text::TabularDisplay

Author: DARREN

ACME::CPANMODULES FEATURE COMPARISON MATRIX

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

Notes:

1. align_cell: Whether module supports aligning text horizontally in individual cells (left/right/middle)
2. align_column: Whether module supports aligning text horizontally in a column (left/right/middle)
3. align_row: Whether module supports aligning text horizontally in a row (left/right/middle)
4. box_char: Whether module can utilize box-drawing characters
5. color_data: Whether module supports ANSI colors (i.e. text with ANSI color codes can still be aligned properly)
6. color_theme: Whether the module supports color theme/scheme
7. colspan: Whether module supports column spans
8. custom_border: Whether module allows customizing border in some way
9. custom_color: Whether the module produces colored table and supports customizing color in some way
10. multiline_data: Whether module supports aligning data cells that contain newlines
11. rowspan: Whether module supports row spans
12. speed: Rendering speed
13. valign_cell: Whether module supports aligning text vertically in individual cells (top/bottom/middle)
14. valign_column: Whether module supports aligning text vertically in a column (top/bottom/middle)
15. valign_row: Whether module supports aligning text vertically in a row (top/bottom/middle)
16. column_width: Whether module allows setting the width of columns
17. pad: Whether module allows customizing cell horizontal padding
18. per_column_width: Whether module allows setting column width on a per-column basis
19. per_row_height: Whether module allows setting row height on a per-row basis
20. row_height: Whether module allows setting the height of rows
21. vpad: Whether module allows customizing cell vertical padding
22. Depends on backend
23. Limited choice of 1 ASCII style and 1 UTF style
24. Slightly slower than Text::Table::Tiny
25. But this module can pass rendering to other module like Text::UnicodeBox::Table
26. Newlines stripped
27. Does not draw borders
28. The fastest among the others in this list
29. Irrelevant
30. But make sure your CSV parser can handle multiline cell
31. Not converted to HTML color elements

BENCHMARKED MODULES

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

Text::Table::Any 0.115

Text::SimpleTable 2.07

Text::UnicodeBox::Table

Text::Table::Manifold 1.03

Text::ANSITable 0.609

Text::ASCIITable 0.22

Text::FormatTable 1.03

Text::MarkdownTable 0.3.1

Text::Table 1.135

Text::Table::Tiny 1.03

Text::Table::TinyBorderStyle 0.005

Text::Table::More 0.025

Text::Table::Sprintf 0.006

Text::Table::TinyColor 0.002

Text::Table::TinyColorWide 0.001

Text::Table::TinyWide 0.001

Text::Table::Org 0.031

Text::Table::CSV 0.023

Text::Table::HTML 0.010

Text::Table::HTML::DataTables 0.012

Text::TabularDisplay 1.38

BENCHMARK PARTICIPANTS

BENCHMARK DATASETS

  • tiny (1x1)

  • small (3x5)

  • wide (30x5)

  • long (3x300)

  • large (30x300)

  • multiline data (2x1) (not included by default)

  • wide char data (1x2) (not included by default)

  • color data (1x2) (not included by default)

BENCHMARK SAMPLE RESULTS

Sample benchmark #1

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

Benchmark command (default options):

% bencher --cpanmodules-module TextTable

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

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

The above result formatted in Benchmark.pm style:

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

The above result presented as chart:

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

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

The above result formatted in Benchmark.pm style:

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

The above result presented as chart:

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

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

The above result formatted in Benchmark.pm style:

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

The above result presented as chart:

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

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

The above result formatted in Benchmark.pm style:

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

The above result presented as chart:

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

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

The above result formatted in Benchmark.pm style:

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

The above result presented as chart:

Sample benchmark #2

Benchmark command (benchmarking module startup overhead):

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

Result formatted as table:

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

The above result formatted in Benchmark.pm style:

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

The above result presented as chart:

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

SAMPLE OUTPUTS

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

  • "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 |
    +--------+--------+--------+
  • "Text::SimpleTable"

    .-----------+-----------+-----------.
    | col1 | col2 | col3 |
    +-----------+-----------+-----------+
    | row1.1 | row1.2 | row1.3 |
    | row2.1 | row2.2 | row2.3 |
    | row3.1 | row3.2 | row3.3 |
    | row4.1 | row4.2 | row4.3 |
    | row5.1 | row5.2 | row5.3 |
    '-----------+-----------+-----------'
  • "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 |
    +--------+--------+--------+
  • "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 |
    `--------+--------+--------'
  • "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 |
    '--------+--------+--------'
  • "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
  • "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 |
  • "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
  • "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 |
    +--------+--------+--------+
  • "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 |
    `--------+--------+--------'
  • "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 |
    `--------+--------+--------'
  • "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 |
    +--------+--------+--------+
  • "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 |
    +--------+--------+--------+
  • "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 |
    +--------+--------+--------+
  • "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 |
    +--------+--------+--------+
  • "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 |
  • "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"
  • "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>
  • "Text::Table::HTML::DataTables"

    <html>
    <head>
    <script>var dt_opts = {"buttons":["colvis","print"],"dom":"lQfrtip"}; $(document).ready(function() { $("table").DataTable(dt_opts); $("select[name=DataTables_Table_0_length]").val(1000); $("select[name=DataTables_Table_0_length]").trigger("change"); });</script>
    </head>
    <body>
    <table>
    <thead>
    <tr><th>col1</th><th>col2</th><th>col3</th></tr>
    </thead>
    <tbody>
    <tr><td>row1.1</td><td>row1.2</td><td>row1.3</td></tr>
    <tr><td>row2.1</td><td>row2.2</td><td>row2.3</td></tr>
    <tr><td>row3.1</td><td>row3.2</td><td>row3.3</td></tr>
    <tr><td>row4.1</td><td>row4.2</td><td>row4.3</td></tr>
    <tr><td>row5.1</td><td>row5.2</td><td>row5.3</td></tr>
    </tbody>
    </table>
    </body>
    </html>
  • "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 |
    +--------+--------+--------+

FAQ

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 Acme::CPANModules for more details.

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 cpanm-cpanmodules script (from App::cpanm::cpanmodules distribution):

% cpanm-cpanmodules -n TextTable

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

% cpanmodules ls-entries TextTable | cpanm -n

or 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 bencher CLI (from Bencher distribution):

% bencher --cpanmodules-module TextTable

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

HOMEPAGE

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

SOURCE

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

SEE ALSO

Related lists: Acme::CPANModules::HTMLTable, Acme::CPANModules::BrowsingTableInteractively.

Acme::CPANModules - about the Acme::CPANModules namespace

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

AUTHOR

perlancar <perlancar@cpan.org>

CONTRIBUTING

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

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

% prove -l

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

COPYRIGHT AND LICENSE

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

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

BUGS

Please report any bugs or feature requests on the bugtracker website 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.