Perl aligned plain-text terminal table
Perl
use strict;
use warnings;
sub render_table {
my ($headers, @rows) = @_;
my @width = map { 0 } @$headers;
for my $row ($headers, @rows) {
for my $i (0 .. $#$headers) {
my $len = length($row->[$i] // '');
$width[$i] = $len if $len > $width[$i];
}
}
my $fmt = sub {
my ($row) = @_;
join ' ', map { sprintf '%-*s', $width[$_], $row->[$_] // '' } 0 .. $#$headers;
};
return join "\n", $fmt->($headers), join(' ', map { '-' x $_ } @width), map { $fmt->($_) } @rows;
}
print render_table(['name', 'size'], ['alpha', 12], ['be', 4]), "\n";