NAME
Acme::CPANModules::TextTable - Modules that generate text tables
VERSION
This document describes version 0.012 of Acme::CPANModules::TextTable (from Perl distribution Acme-CPANModules-TextTable), released on 2021-07-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
.
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::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
- 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 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::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:
- 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. But this module can pass rendering to other module like Text::UnicodeBox::Table
- 24. Newlines stripped
- 25. Does not draw borders
- 26. Irrelevant
- 27. But make sure your CSV parser can handle multiline cell
- 28. 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.104
Text::ANSITable 0.602
Text::ASCIITable 0.22
Text::FormatTable 1.03
Text::MarkdownTable 0.3.1
Text::Table 1.134
Text::Table::Tiny 1.02
Text::Table::TinyBorderStyle 0.004
Text::Table::More 0.014
Text::Table::Sprintf 0.003
Text::Table::TinyColor 0.002
Text::Table::TinyColorWide 0.001
Text::Table::TinyWide 0.001
Text::Table::Org 0.02
Text::Table::CSV 0.023
Text::Table::HTML 0.004
Text::Table::HTML::DataTables 0.007
Text::TabularDisplay 1.38
BENCHMARK PARTICIPANTS
Text::Table::Any (perl_code)
Text::UnicodeBox::Table (perl_code)
Text::Table::Manifold (perl_code)
Text::ANSITable (perl_code)
Text::ASCIITable (perl_code)
Text::FormatTable (perl_code)
Text::MarkdownTable (perl_code)
Text::Table (perl_code)
Text::Table::Tiny (perl_code)
Text::Table::TinyBorderStyle (perl_code)
Text::Table::More (perl_code)
Text::Table::Sprintf (perl_code)
Text::Table::TinyColor (perl_code)
Text::Table::TinyColorWide (perl_code)
Text::Table::TinyWide (perl_code)
Text::Table::Org (perl_code)
Text::Table::CSV (perl_code)
Text::Table::HTML (perl_code)
Text::Table::HTML::DataTables (perl_code)
Text::TabularDisplay (perl_code)
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.34.0, CPU: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz (4 cores), OS: GNU/Linux LinuxMint version 19, OS kernel: 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 Benchmark.pm 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:
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 Benchmark.pm 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:
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 Benchmark.pm 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:
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 Benchmark.pm 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:
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 Benchmark.pm 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:
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 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::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:
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:
-
+--------+--------+--------+ | 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 | +--------+--------+--------+
-
+--------+--------+--------+ | 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 | +--------+--------+--------+
-
.--------+--------+--------. | 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 | `--------+--------+--------'
-
.--------------------------. | 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 | '--------+--------+--------'
-
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
-
| 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 |
-
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
-
+--------+--------+--------+ | 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 | `--------+--------+--------'
-
.--------+--------+--------. | 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 | `--------+--------+--------'
-
+--------+--------+--------+ | 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 | +--------+--------+--------+
-
+--------+--------+--------+ | 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 | +--------+--------+--------+
-
+--------+--------+--------+ | 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 | +--------+--------+--------+
-
+--------+--------+--------+ | 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 | +--------+--------+--------+
-
| 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 |
-
"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"
-
<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> <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>
-
+--------+--------+--------+ | 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.
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.
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.
SEE ALSO
Acme::CPANModules - about the Acme::CPANModules namespace
cpanmodules - CLI tool to let you browse/view the lists
AUTHOR
perlancar <perlancar@cpan.org>
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.