Here's another approach that you might find instructive:
my $text = "0 X X X ...";
my @items = split(' ', $text);
my @array;
while (@items) {
push(@array, [ splice(@items, 0, 8) ]);
}
pp \@array; use Data::Dumper;
The basic idea is:
- Split the input string into an array (@items).
- Remove the first 8 elements of @items, create an array ref out of those elements, and push that array ref onto the end of @array
- Repeat step 2 until @items is empty.
To make sure you have a full matrix, you can check the length of the last row with:
die "incomplete last row\n"
unless (scalar(@{$array[-1]} == 8);