|
NAMEText::Table::Tiny - generate simple text tables from 2D arraysSYNOPSISuse Text::Table::Tiny 1.02 qw/ generate_table /; my $rows = [ [qw/ Pokemon Type Count /], [qw/ Abra Psychic 5 /], [qw/ Ekans Poison 123 /], [qw/ Feraligatr Water 5678 /], ]; print generate_table(rows => $rows, header_row => 1), "\n"; DESCRIPTIONThis module provides a single function, "generate_table", which formats a two-dimensional array of data as a text table. It handles text that includes ANSI escape codes and wide Unicode characters.There are a number of options for adjusting the output format, but the intention is that the default option is good enough for most uses. The example shown in the SYNOPSIS generates the following table: +------------+---------+-------+ | Pokemon | Type | Count | +------------+---------+-------+ | Abra | Psychic | 5 | | Ekans | Poison | 123 | | Feraligatr | Water | 5678 | +------------+---------+-------+ Support for wide characters was added in 1.02, so if you need that, you should specify that as your minimum required version, as per the SYNOPSIS. The interface changed with version 0.04, so if you use the "generate_table()" function illustrated above, then you need to require at least version 0.04 of this module. Some of the options described below were added in version 1.00, so your best bet is to require at least version 1.00. generate_table()The "generate_table" function understands a number of arguments, which are passed as a hash. The only required argument is rows. Where arguments were not supported in the original release, the first supporting version is noted.If you pass an unknown argument, "generate_table" will die with an error message.
EXAMPLESIf you just pass the data and no other options:generate_table(rows => $rows); You get minimal ruling: +------------+---------+-------+ | Pokemon | Type | Count | | Abra | Psychic | 5 | | Ekans | Poison | 123 | | Feraligatr | Water | 5678 | +------------+---------+-------+ If you want a separate header, set the header_row option to a true value, as shown in the SYNOPSIS. To take up fewer lines, you can miss out the top and bottom rules, by setting "top_and_tail" to a true value: generate_table(rows => $rows, header_row => 1, top_and_tail => 1); This will generate the following: | Pokemon | Type | Count | +------------+---------+-------+ | Abra | Psychic | 5 | | Ekans | Poison | 123 | | Feraligatr | Water | 5678 | If you want a more stylish looking table, set the "style" parameter to 'boxrule': binmode(STDOUT,':utf8'); generate_table(rows => $rows, header_row => 1, style => 'boxrule'); This uses the ANSI box rule characters. Note that you will need to ensure UTF output. ┌────────────┬─────────┬───────┐ │ Pokemon │ Type │ Count │ ├────────────┼─────────┼───────┤ │ Abra │ Psychic │ 5 │ │ Ekans │ Poison │ 123 │ │ Feraligatr │ Water │ 5678 │ └────────────┴─────────┴───────┘ You might want to right-align numeric values: generate_table( ... , align => [qw/ l l r /] ); The "align" parameter can either take an arrayref, or a string with an alignment to apply to all columns: ┌────────────┬─────────┬───────┐ │ Pokemon │ Type │ Count │ ├────────────┼─────────┼───────┤ │ Abra │ Psychic │ 5 │ │ Ekans │ Poison │ 123 │ │ Feraligatr │ Water │ 5678 │ └────────────┴─────────┴───────┘ If you're using the boxrule style, you might feel you can remove the padding on either side of every column, done by setting "compact" to a true value: ┌──────────┬───────┬─────┐ │Pokemon │Type │Count│ ├──────────┼───────┼─────┤ │Abra │Psychic│ 5│ │Ekans │Poison │ 123│ │Feraligatr│Water │ 5678│ └──────────┴───────┴─────┘ You can also ask for a rule between each row, in which case the header rule becomes stronger. This works best when combined with the boxrule style: generate_table( ... , separate_rows => 1 ); Which results in the following: ┌────────────┬─────────┬───────┐ │ Pokemon │ Type │ Count │ ╞════════════╪═════════╪═══════╡ │ Abra │ Psychic │ 5 │ ├────────────┼─────────┼───────┤ │ Ekans │ Poison │ 123 │ ├────────────┼─────────┼───────┤ │ Feraligatr │ Water │ 5678 │ └────────────┴─────────┴───────┘ You can use this with the other styles, but I'm not sure you'd want to. If you just want columnar output, use the "norule" style: generate_table( ... , style => 'norule' ); which results in: Pokemon Type Count Abra Psychic 5 Ekans Poison 123 Feraligatr Water 5678 Note that everywhere you saw a line on the previous tables, there will be a space character in this version. So you may want to combine the "top_and_tail" option, to suppress the extra blank lines before and after the body of the table. SEE ALSOMy blog post <http://neilb.org/2019/08/06/text-table-tiny-changes.html> where I described changes to formatting; this has more examples.There are many modules for formatting text tables on CPAN. A good number of them are listed in the See Also <https://metacpan.org/pod/Text::Table::Manifold#See-Also> section of the documentation for Text::Table::Manifold. REPOSITORY<https://github.com/neilb/Text-Table-Tiny>AUTHORNeil Bowers <neilb@cpan.org>The original version was written by Creighton Higgins <chiggins@chiggins.com>, but the module was entirely rewritten for 0.05_01. COPYRIGHT AND LICENSEThis software is copyright (c) 2020 by Neil Bowers.This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
Visit the GSP FreeBSD Man Page Interface. |