sub map_nbsp (&@) { my ($codeblock, $cols) = splice @_, 0, 2; splice @_, @_, 0, (' ')x$cols if @_ % $cols; my $rows = int @_/$cols; map{ $codeblock->(@_[$cols*$_ .. $cols*($_+1)-1]); } 0 .. ($rows)-1; } my @tabular_data = map{ 1000+int rand 8999 } 1 .. 9; print table( {border=>1}, map_nbsp{ Tr( td( \@_ ) ); } 4, @tabular_data );