#!/usr/bin/env perl
use strict;
use warnings;
my $multi_data_1 = [qw{
123 456 789 0 _-=+
qwe rty uio p {[]}
asd fgh jkl :; '"
zxc vbn m <>?/
}];
print_table(MULTI_COL => 'QWERTY Keyboard', $multi_data_1, 5);
my $step_data = [qw{Step2 0 4 Step3 4 4}];
print_table(STEP => 'TAB', $step_data, 3);
my $multi_data_2 = [
'skip1', '', 'skip2', '', '',
'skip2', '', '', 'skip1', '',
'skip', 'rest',
];
print_table(MULTI_COL => 'Skipped Cells', $multi_data_2, 5);
sub print_table {
my ($form, $title, $all_data, $cols) = @_;
format STEP =
.===================.
|@<<<<<<<<<<<<<<<<< |
$title
.=======.===========.
|@<<<<<<| @<</@>> |~~
get_col_data($all_data, $cols)
.=======.===========.
.
format MULTI_COL =
/=======================================\
| @|||||||||||||||||||||||||||||||||||| |
$title
|---------------------------------------|
| @<<<< | @<<<< | @<<<< | @<<<< | @<<<< |~~
get_col_data($all_data, $cols)
\=======================================/
.
local $~ = $form;
write;
return;
}
sub get_col_data {
my ($all_data, $cols) = @_;
my @cols_data = splice @$all_data, 0, $cols;
return @cols_data, ('') x ($cols - @cols_data);
}
Output:
/=======================================\
| QWERTY Keyboard |
|---------------------------------------|
| 123 | 456 | 789 | 0 | _-=+ |
| qwe | rty | uio | p | {[]} |
| asd | fgh | jkl | :; | '" |
| zxc | vbn | m | <>?/ | |
\=======================================/
.===================.
|TAB |
.=======.===========.
|Step2 | 0 / 4 |
|Step3 | 4 / 4 |
.=======.===========.
/=======================================\
| Skipped Cells |
|---------------------------------------|
| skip1 | | skip2 | | |
| skip2 | | | skip1 | |
| skip | rest | | | |
\=======================================/
Update:
In get_col_data(), I changed three instances of @step_data to @cols_data.
The output is unchanged.
The original @step_data was from when I was initially testing with the OP's format
(with Step2 & Step3).
The change is in line with my opening statement that this was a "generic solution".
|