NAME

Text::Table::Sprintf - Generate simple text tables from 2D arrays using sprintf()

VERSION

This document describes version 0.006 of Text::Table::Sprintf (from Perl distribution Text-Table-Sprintf), released on 2022-01-07.

SYNOPSIS

use Text::Table::Sprintf;

my $rows = [
    # header row
    ['Name', 'Rank', 'Serial'],
    # rows
    ['alice', 'pvt', '123456'],
    ['bob',   'cpl', '98765321'],
    ['carol', 'brig gen', '8745'],
];
print Text::Table::Sprintf::table(rows => $rows, header_row => 1);

DESCRIPTION

This module provides a single function, table, which formats a two-dimensional array of data as a simple text table.

The example shown in the SYNOPSIS generates the following table:

+-------+----------+----------+
| Name  | Rank     | Serial   |
+-------+----------+----------+
| alice | pvt      | 123456   |
| bob   | cpl      | 98765321 |
| carol | brig gen | 8745     |
+-------+----------+----------+

This module models its interface on Text::Table::Tiny 0.03, employs the same technique of using sprintf(), but takes the technique further by using a single large format and sprintf the whole table. This results in even more performance gain (see benchmark result or benchmark using Acme::CPANModules::TextTable).

Caveats: make sure each row contains the same number of elements. Otherwise, the table will not be correctly formatted (cells might move to another row/column).

DECLARED FEATURES

Features declared by this module:

From feature set TextTable

Features from feature set TextTable declared by this module:

  • can_align_cell_containing_color_code

    Value: no.

  • can_align_cell_containing_newline

    Value: no.

  • can_align_cell_containing_wide_character

    Value: no.

  • can_color

    Can produce colored table.

    Value: no.

  • can_color_theme

    Allow choosing colors from a named set of palettes.

    Value: no.

  • can_colspan

    Value: no.

  • can_customize_border

    Let user customize border character in some way, e.g. selecting from several available borders, disable border.

    Value: no.

  • can_halign

    Provide a way for user to specify horizontal alignment (left/middle/right) of cells.

    Value: no.

  • can_halign_individual_cell

    Provide a way for user to specify different horizontal alignment (left/middle/right) for individual cells.

    Value: no.

  • can_halign_individual_column

    Provide a way for user to specify different horizontal alignment (left/middle/right) for individual columns.

    Value: no.

  • can_halign_individual_row

    Provide a way for user to specify different horizontal alignment (left/middle/right) for individual rows.

    Value: no.

  • can_hpad

    Provide a way for user to specify horizontal padding of cells.

    Value: no.

  • can_hpad_individual_cell

    Provide a way for user to specify different horizontal padding of individual cells.

    Value: no.

  • can_hpad_individual_column

    Provide a way for user to specify different horizontal padding of individual columns.

    Value: no.

  • can_hpad_individual_row

    Provide a way for user to specify different horizontal padding of individual rows.

    Value: no.

  • can_rowspan

    Value: no.

  • can_set_cell_height

    Allow setting height of rows.

    Value: no.

  • can_set_cell_height_of_individual_row

    Allow setting height of individual rows.

    Value: no.

  • can_set_cell_width

    Allow setting height of rows.

    Value: no.

  • can_set_cell_width_of_individual_column

    Allow setting height of individual rows.

    Value: no.

  • can_use_box_character

    Can use terminal box-drawing character when drawing border.

    Value: no.

  • can_valign

    Provide a way for user to specify vertical alignment (top/middle/bottom) of cells.

    Value: no.

  • can_valign_individual_cell

    Provide a way for user to specify different vertical alignment (top/middle/bottom) for individual cells.

    Value: no.

  • can_valign_individual_column

    Provide a way for user to specify different vertical alignment (top/middle/bottom) for individual columns.

    Value: no.

  • can_valign_individual_row

    Provide a way for user to specify different vertical alignment (top/middle/bottom) for individual rows.

    Value: no.

  • can_vpad

    Provide a way for user to specify vertical padding of cells.

    Value: no.

  • can_vpad_individual_cell

    Provide a way for user to specify different vertical padding of individual cells.

    Value: no.

  • can_vpad_individual_column

    Provide a way for user to specify different vertical padding of individual columns.

    Value: no.

  • can_vpad_individual_row

    Provide a way for user to specify different vertical padding of individual rows.

    Value: no.

  • speed

    Subjective speed rating, relative to other text table modules.

    Value: "fast".

For more details on module features, see Module::Features.

FUNCTIONS

table

Usage:

my $table_str = Text::Table::Sprintf::table(%params);

The table function understands these arguments, which are passed as a hash.

  • rows (aoaos)

    Takes an array reference which should contain one or more rows of data, where each row is an array reference.

  • header_row (bool)

    If given a true value, the first row in the data will be interpreted as a header row, and separated from the rest of the table with a ruled line.

  • separate_row (bool)

    If set to true, will draw separator line between data rows.

generate_table

Alias for "table", for compatibility with Text::Table::Tiny.

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Text-Table-Sprintf.

SOURCE

Source repository is at https://github.com/perlancar/perl-Text-Table-Sprintf.

SEE ALSO

Text::Table::Tiny

Other text table modules listed in Acme::CPANModules::TextTable. The selling point of Text::Table::Sprintf is performance and light footprint (just about a page of code that does not use any module, core or otherwise).

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, and sometimes one or two other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional steps required beyond that are considered a bug and can be reported to me.

COPYRIGHT AND LICENSE

This software is copyright (c) 2022, 2021, 2020 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=Text-Table-Sprintf

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.