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";